加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

nyoj大数加法

发布时间:2020-12-14 02:52:55 所属栏目:大数据 来源:网络整理
导读:水题。需要注意的就是这里不能直接从a0,b0开始加,因为他们如果位数不一样就会发生错乱,如123+6789,如果直接从1、6开始加,和阶乘一样,那么就错了,因为位不对应了。所以必须先把a和b逆序存入另两个字符串,变成321+9876,然后从第0位开始挨着加就行了,
水题。需要注意的就是这里不能直接从a0,b0开始加,因为他们如果位数不一样就会发生错乱,如123+6789,如果直接从1、6开始加,和阶乘一样,那么就错了,因为位不对应了。所以必须先把a和b逆序存入另两个字符串,变成321+9876,然后从第0位开始挨着加就行了,最后也是逆序输出。


#include
#include
int main()
{
? ? int t,i,cou = 0,k,j,c[1005],jin,s,la,lb;
? ? char a[1005],b[1005],a1[1005],b1[1005];
? ? scanf("%d",&t);
? ? while(t--)
? ? {
? ? ? ? cou++;
? ? ? ? scanf("%s %s",a1,b1);
? ? ? ? printf("Case %d:n",cou);
? ? ? ? printf("%s + %s = ",b1);
? ? ? ? la = strlen(a1);
? ? ? ? lb = strlen(b1);
? ? ? ? for(i = 0,j = la - 1 ; i < la ; i++,j--) //逆序存入
? ? ? ? ? ? a[j] = a1[i];
? ? ? ? a[la] = '';
? ? ? ? for(i = 0,j = lb - 1 ; i < lb ; i++,j--)
? ? ? ? ? ? b[j] = b1[i];
? ? ? ? b[lb] = '';
? ? ? ? jin = 0;
? ? ? ? for(i = 0 ; a[i] != '' && b[i] != '' ; i++)
? ? ? ? {
? ? ? ? ? ? s = a[i] + b[i] - 96 + jin;
? ? ? ? ? ? c[i] = s % 10;
? ? ? ? ? ? jin = s/10;
? ? ? ? }
? ? ? ? j = i; ? //这里如果漏了。。那么位数一样的就输出不出来了,因为j没赋值。
? ? ? ? if(a[i] != '') ? //处理a与b不对应的位上的数字和,即多余位
? ? ? ? {
? ? ? ? ? ? for(j = i ; a[j] != '' ; j++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? s = a[j] + jin - 48;
? ? ? ? ? ? ? ? c[j] = s % 10;
? ? ? ? ? ? ? ? jin = s / 10;
? ? ? ? ? ? }

? ? ? ? }
? ? ? ? else if(b[i] != '')
? ? ? ? {
? ? ? ? ? ? for(j = i ; b[j] != '' ; j++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? s = b[j] + jin - 48;
? ? ? ? ? ? ? ? c[j] = s % 10;
? ? ? ? ? ? ? ? jin = s / 10;
? ? ? ? ? ? }

? ? ? ? }
? ? ? ? k = j - 1;
? ? ? ? if(jin) ? //别忘了处理最后的进位
? ? ? ? {
? ? ? ? ? ? c[j] = jin;
? ? ? ? ? ? k = j;
? ? ? ? }
? ? ? ? for(; k >= 0 ; k--)
? ? ? ? ? ? printf("%d",c[k]);
? ? ? ? printf("n");
? ? }
? ? return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读