解题思路:由于是大数,所以只能用字符串保存输入的内容,然后逆序,然后再相加,再考虑进位。本题中用字符数组a,b保存输入的两个数,逆序后相加保存到整型数组c中,最后考虑进位情况。
注意事项:注意最后一次是否有进位。
参考代码:
#include <stdio.h> #include <string.h> #define N 1002 void reverse(char *s) //逆序函数 { int len,i,j; char t; len=strlen(s); for(i=0,j=len-1;i<j;i++,j--) { t=s[i]; s[i]=s[j]; s[j]=t; } } int main() { char a[N]={0},b[N]={0}; int c[N]={0}; int n,i,lena,lenb,lenc,jinwei; while(scanf("%s%s",a,b)!=EOF) { lena=strlen(a); //求长度 lenb=strlen(b); reverse(a); //逆序a reverse(b); //逆序b n=lena<lenb?lena:lenb; for(i=0;i<n;i++) //相加前面部分 c[i]=(a[i]-'0') +(b[i]-'0'); if(lena<lenb) for(i=lena;i<lenb;i++) //复制后面一段 c[i]=b[i]-'0'; else for(i=lenb;i<lena;i++) //复制后面一段 c[i]=a[i]-'0'; lenc=lena>lenb?lena:lenb; jinwei=0; for(i=0;i<lenc;i++) //考虑进位情况 { c[i]+=jinwei; jinwei=c[i]/10; c[i]=c[i]%10; } if(jinwei==1) //最后一位是否有进位 { lenc++; c[i]=1; } for(i=lenc-1;i>=0;i--) //输出全部 printf("%d",c[i]); printf("\n"); } return 0; }
0.0分
0 人评分
Hello, world! (C语言代码)浏览:995 |
点我有惊喜!你懂得!浏览:1439 |
永远的丰碑 (C语言代码)浏览:698 |
C语言训练-字符串正反连接 (C语言代码)浏览:664 |
C语言训练-求素数问题 (C语言代码)浏览:1509 |
字符串的输入输出处理 (C语言代码)浏览:1020 |
Hello, world! (C++代码)浏览:1778 |
川哥的吩咐 (C语言代码)浏览:663 |
输入输出格式练习 (C语言代码)浏览:773 |
神奇的fans (C语言代码)浏览:1125 |