|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目要求计算两个长度为100以内的正整数之和,我自己写了一个,但是测试数位大了就会有问题,而且还有一个非常奇怪的现象就是如果两个数字的某个数位加起来等于10,就输出不了,求大佬指正!
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
char a[100],b[100],c[100];
gets(a);
gets(b);
int lena=strlen(a);
int lenb=strlen(b);
int i,j,k=0;
if(lena>=lenb)
{
for(i=lena-1,j=lenb-1; j>=0; k++,j--,i--)
{
c[k]+=(a[i]+b[j]-2*'0')%10;
c[k+1]=(a[i]+b[j]-2*'0')/10;
}
for(i=lena-lenb-1; i>=0; i--)
{
c[k++]+=a[i]-'0';
}
}
else
{
for(i=lena-1,j=lenb-1; i>=0; k++,j--,i--)
{
c[k]+=(a[i]+b[j]-2*'0')%10;
c[k+1]+=(a[i]+b[j]-2*'0')/10;
}
for(i=lenb-lena-1; i>=0; i--)
{
c[k++]+=b[i]-'0';
}
}
for(i=strlen(c)-1; i>=0; i--) printf("%c",c[i]+'0');
}
本帖最后由 jackz007 于 2022-11-8 00:03 编辑
最大的问题是第二个循环没有把前面的进位继续传递下去
- #include<stdio.h>
- #include<string.h>
- int main()
- {
- char a[100] , b[100] , c[100] , * p1 , * p2 , t ;
- int d1 , d2 , e , i , k , lena , lenb ;
- gets(a) ;
- gets(b) ;
- lena = strlen(a) ;
- lenb = strlen(b) ;
- p1 = (lena < lenb) ? a : b ;
- p2 = (lena < lenb) ? b : a ;
- d1 = (lena < lenb) ? lena : lenb ;
- d2 = (lena < lenb) ? lenb : lena ;
- for(e = k = 0 ; k < d2 ; k ++) {
- if(k < d1) c[k] = p1[d1 - 1 - k] - '0' + p2[d2 - 1 - k] - '0' + e ;
- else c[k] = p2[d2 - 1 - k] - '0' + e ;
- e = c[k] / 10 ;
- c[k] %= 10 ;
- c[k] += '0' ;
- }
- if(e) c[k ++] = e + '0' ;
- for(i = 0 ; i < k / 2 ; i ++) {
- t = c[k - 1 - i] ;
- c[k - 1 - i] = c[i] ;
- c[i] = t ;
- }
- printf("%s\n" , c) ;
- }
复制代码
编译、运行实况:
- D:\[00.Exerciese.2022]\C>g++ -o x x.c
- D:\[00.Exerciese.2022]\C>x
- 9999999999999999999999999999999999999999999999999999999999999999999999999999
- 2
- 10000000000000000000000000000000000000000000000000000000000000000000000000001
- D:\[00.Exerciese.2022]\C>
复制代码
|
|