c语言编程问题,编写代码,a+b问题,求大神帮忙哇( ๑ŏ ﹏ ŏ๑ )

给定2个正整数a,b,a和b最多可能有40位,求出a+b的和
输入描述
两个正整数a,b,a和b最多可能有40位。一行表示一个数。
输出描述
a+b的和。
样例输入
1111111111111111111111111111111111111111111111111111111111111111111
2222222222222222222222222222222222222222222222222222222222222222222
样例输出
3333333333333333333333333333333333333333333333333333333333333333333

【解题思路】这道题的难点是超多位数,也就是说40位数用最长的基础类型都表示不下。这个时候可以用数组,最简单的就是你定义三个长度为40的字符数组,每个元素存放一个0-9的数值,然后逐位进行加运算,碰到超过10的就进位。

【程序代码】
#include<iostream>
#include<stdio.h>
#include<conio.h>
using namespace std;
int main()
{char a[40]={0},b[40]={0},c[41],d,i,j,k;
 printf("请输入第一个位:");        //显示输入提示
 for(i=0;i<40;i++)                 //通过循环读入a数组
    {do{d=getch();                 //从键盘获取一个字符
        if(d==13||d==' ') break;   //如果读到的是回车或空格退出循环
        }while(d<'0'||d>'9');      //如果输入的为非数字,忽略重输
     printf("%c",d);               //显示字符(因为getch函数不回显) 
     if(d==13||d==' ') break;      //如果是回车或空格结束读取 
     c[i]=d-'0';}                  //否则的话让c[i]等于输入的数值
 i--;
 for(k=i;k>=0;k--) a[i-k]=c[k];    //倒序排列 
/*关于输入有很多种方法,可以用cin, scanf(),也可以用getchar(),各有优劣,这里之所以用getch(),是因为getch不回显,这样可以及时作出判断,不是数字就直接忽略。
另外为什么要倒序,是为了保证a[0]和b[0]都是个位数,这样后面加法运算时,不用去费劲的对齐*/ 

 printf("\n请输入第二个位:");      //显示输入提示
 for(j=0;j<40;j++)                 //通过循环读入b数组
    {do{d=getch();                 //从键盘获取一个字符
        if(d==13||d==' ') break;   //如果读到回车或空格退出循环
        }while(d<'0'||d>'9');      //如果输入的为非数字,忽略重输
     printf("%c",d);               //显示字符(因为getch函数不回显) 
     if(d==13||d==' ') break;      //如果是回车或空格结束读取 
     c[j]=d-'0';}                  //否则的话让c[j]等于输入的数值
 j--;
 for(k=j;k>=0;k--) b[j-k]=c[k];    //倒序排列 
 for(k=0;k<41;k++) c[k]=0;         //初始化c数组
 
 if (i<j) d=j;else d=i;            //不需要40位全部计算,只需要计算位数大的
 printf("\n两个数的和等于:");      //显示结果
 for(k=0;k<=d;k++)                 //通过循环计算
    {c[k]=(c[k]+a[k]+b[k]);        //算出和 
     c[k+1]=c[k]/10;               //如果超过10则进位
     c[k]=c[k]%10;}                //取个位数,避免超过10 
 
 
 if(c[d+1]!=0) d++;                //如果最高位有进位,则最高位再加一位
 for(k=d;k>=0;k--)                 //用循环显示出c数组的每一位 
     printf("%d",c[k]);            //显示出c数组的每一位 
 printf("\n",d);                   //换行 
 system("PAUSE");                  //暂停屏幕,以看清结果
 return 0;}                        //结束程序

【运行结果】

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-11-04

这个涉及到格式化输入,其余都不难。只要知道如何格式话输入即可。

代码如下:

#pragma warning(disable : 4996)
#include<stdio.h>
int main()
{
int a, b;
scanf("%40d", &a);
scanf("%40d", &b);
printf("%d", a+b);
return 0;
}

追问

可是这样不对呀

本回答被网友采纳
相似回答