这个老到掉牙的大数运算问题,本人一个初学者,在这里发了给自己看吧—,如果可以帮助别人,我也是很开心的哈,不过我这表诉能力,emmm,废话不多说,上干货
123456
+
126
主要问题:
1.大数用什么存放?
2.两个大数相加,结果有几位数?
3.如何进行逢十进一的操作?
4.字符的0-9与数值的0-9之间转换的问题
/**************************************************************************************/
/* 大数运算篇——加法 */
/* 123456 分析:从最低位到最高位,一次相加 得到结果为 1 2 3 5 7 12 */
/* + 遇到大于10的数字,则保留个位,并向前进一 12>10 7+1 =8 12变2 */
/* 126 写入新的结果 123582 需要注意的是,0的ASCⅡ码是48,这中间有 */
/* =123582 一个换算,即 字符6 - '0'在数值上才是6 */
/**************************************************************************************/
/*具体问题:
1.如何存放大数 用字符数组
2.如何确定结果位数 相加时候,位数最大的位数+1 一个5位数加一个五位数,最多变成6位数
3.如何进行逢十进一 利用循环,倒序相加
4.注意:只有两个数都有的时候才相加,一个数不存在的时候,直接写入结果
*/
//作者:fat pears 最近更新时间:2019.01.30
/*代码实现*/
#include
#include
#define N 10000
int main()
{
char num_1[N]={0},num_2[N]={0},result[N]={0};
long len_1,len_2,len;
int i;
printf("请输入第一个数\n");
scanf("%s",num_1);
getchar();
printf("请输入第二个数\n");
gets(num_2);
//计算两个数的位数以及结果的最大位数
len_1 = strlen(num_1);
len_2 = strlen(num_2);
len = len_1>len_2? len_1:len_2 ;
len++;
//倒序相加直到小的数被加完为止
for(i = 0;ilen_2)
{
for(;i0;i--)
{
if(result[i]>=10)
{
result[i] = result[i]%10;
result[i-1]++;
}
}
//判断是后位数多出一位 9+8=17变成2位数,如果没有则全部前移。并变回数字的ASC2码
if(result[0]!= 0)
{
for(i = 0;i
以上,没了=-=
总的来说,没啥想说的=-=