本文共 3676 字,大约阅读时间需要 12 分钟。
可是我能写所以我骄傲 #include
void add(char num1[],char num2[]){
unsigned len1=(unsigned int)strlen(num1);
unsigned len2=(unsigned int)strlen(num2);
char tempc,option;
char temparr[1000];
bool positive,s;
char *head=num1,*rear=num1+strlen(num1)-1;
while (head
tempc=*head;
*head=*rear;
*rear=tempc;
head++;
rear--;
}
head=num2;
rear=num2+strlen(num2)-1;
while (head
tempc=*head;
*head=*rear;
*rear=tempc;
head++;
rear--;
}
//两数同号
if (num1[strlen(num1)-1]!='-' && num2[strlen(num2)-1]!='-') {
if (len1
strcpy(temparr, num1);
strcpy(num1, num2);
strcpy(num2, temparr);
}
positive=true;
option='+'; //运算作加法
}
else if (num1[strlen(num1)-1]=='-' && num2[strlen(num2)-1]=='-') {
num1[strlen(num1)-1]='\0';
num2[strlen(num2)-1]='\0';
len1=(unsigned int)strlen(num1);
len2=(unsigned int)strlen(num2);
if (len1
strcpy(temparr, num1);
strcpy(num1, num2);
strcpy(num2, temparr);
}
positive=false;
option='+'; //运算作加法
}
//两数异号
else if (num1[strlen(num1)-1]=='-' && num2[strlen(num2)-1]!='-') {
num1[strlen(num1)-1]='\0';
len1=(unsigned int)strlen(num1);
len2=(unsigned int)strlen(num2);
if (len1
strcpy(temparr, num1);
strcpy(num1, num2);
strcpy(num2, temparr);
positive=true;
}
else if (len1==len2) {
char *t1=num1+strlen(num1)-1;
char *t2=num2+strlen(num2)-1;
bool change=false;
while (t1>=num1) {
if (*t1!=*t2) {
if (*t1
change=true;
break;
}
t1--;
t2--;
}
if (change) { //|num1|
strcpy(temparr, num1);
strcpy(num1, num2);
strcpy(num2, temparr);
positive=true;
}
else //|num1|>num2,则num1+num2结果为负
positive=false;
}
else { //lenth1>lenth2,则num1+num2结果为负
positive=false;
}
option='-'; //运算作减法
}
else {
num2[strlen(num2)-1]='\0';
len1=(unsigned int)strlen(num1);
len2=(unsigned int)strlen(num2);
if (len1
strcpy(temparr, num1);
strcpy(num1, num2);
strcpy(num2, temparr);
positive=false;
}
else if (len1==len2) {
char *t1=num1+strlen(num1)-1;
char *t2=num2+strlen(num2)-1;
bool change=false;
while (t1>=num1) {
if (*t1!=*t2) {
if (*t1
change=true;
break;
}
t1--;
t2--;
}
if (change) { //num1
strcpy(temparr, num1);
strcpy(num1, num2);
strcpy(num2, temparr);
positive=false;
}
else //num1>|num2|,则num1+num2结果为正
positive=true;
}
else { //lenth1>lenth2,则num1+num2结果为正
positive=true;
}
option='-'; //运算作减法
}
int k=0,carry=0; //开始运算
if (option=='+') {
for (k=0; k
tempc=((num1[k]-'0')+(num2[k]-'0')+carry)%10+'0';
carry=((num1[k]-'0')+(num2[k]-'0')+carry)/10;
num1[k]=tempc;
}
if (carry>0) {
if (k==strlen(num1)) {
num1[k++]='1';
num1[k]='\0';
}
else {
for (; k
tempc=((num1[k]-'0')+carry)%10+'0';
carry=((num1[k]-'0')+carry)/10;
num1[k]=tempc;
}
if (carry>0) {
num1[k++]='1';
num1[k]='\0';
}
}
}
}
else {
for (k=0; k
if (carry==1 && num1[k]=='0') {
num1[k]='9';
num1[k]=(num1[k]-'0')-(num2[k]-'0')+'0';
carry=1;
}
else {
num1[k]=(num1[k]-'0')-carry+'0';
if (num1[k]>=num2[k])
carry=0;
else
carry=1;
num1[k]=num1[k]>=num2[k]?(num1[k]-'0')-(num2[k]-'0')+'0':10+(num1[k]-'0')-(num2[k]-'0')+'0';
}
}
if (carry>0) {
for (; k
if (carry==1 && num1[k]=='0') {
num1[k]='9';
carry=1;
}
else {
num1[k]=(num1[k]-'0')-carry+'0';
carry=0;
}
}
}
num1[k]='\0';
}
if (positive==false) {
num1[k++]='-';
num1[k]='\0';
}
head=num1;
rear=num1+strlen(num1)-1;
while (head
tempc=*head;
*head=*rear;
*rear=tempc;
head++;
rear--;
}
memset(temparr, 0, sizeof(temparr));
if (positive==false) { //去除负数结果符号位高位的0
k=0; s=false;
temparr[k++]=num1[0];
for (int i=1; i
if (s || num1[i]!='0') {
s=true;
temparr[k++]=num1[i];
}
}
temparr[k]='\0';
}
else { //去除正数结果符号位高位的0
k=0; s=false;
for (int i=0; i
if (s || num1[i]!='0') {
s=true;
temparr[k++]=num1[i];
}
}
temparr[k]='\0';
}
printf("%s\n",temparr);
}
int main(){
void add(char [],char []);
char num1[1000],num2[1000];
while (~scanf("%s %s",num1,num2)) {
add(num1, num2);
}
return 0;
}
转载地址:https://blog.csdn.net/weixin_32688155/article/details/114467631 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!