#include <stdio.h>
#include <string.h>
char ar_to_in (char a)
{
return (int)(a - 48);
}
int in_to_ar (int a)
{
return (char)(a + '0');
}
int main()
{
int a_length;
int b_length;
int max_length;
int min_length;
char a[1000];
char b[1000];
printf("please input you want \n");
scanf("%s",a);
printf("please input you want continue \n");
scanf("%s",b);
a_length = strlen(a);
b_length = strlen(b);
int add_flag = 0;
max_length = (a_length>b_length)?a_length:b_length;
min_length = (a_length<b_length)?a_length:b_length;
if(a_length < max_length)
{
add_flag = 1;
}
if(b_length < max_length)
{
add_flag = 2;
}
char c[max_length];
int add_zero_flag = max_length - 1;
//对非0区域补0
for(int i=0;i<max_length;i++)
{
if(add_flag == 1)
{
if(min_length <= 0)
{
c[add_zero_flag] = '0';
printf("case 1: add_zero_flag = %d, %d \n",add_zero_flag,c[add_zero_flag]);
}
if(min_length > 0)
{
c[add_zero_flag] = a[min_length-1];
}
}
if(add_flag == 2)
{
if(min_length <= 0)
{
c[add_zero_flag] = '0';
}
if(min_length > 0)
{
c[add_zero_flag] = b[min_length-1];
}
}
add_zero_flag--;
min_length--;
}
char sum[max_length + 1]; //init add sum
for(int i=0;i<=max_length;i++)
{
sum[i] = '0';
}
int sum_flag = max_length;
int ten_flag = 0;
for(int i=0;i<max_length;i++)
{
if(add_flag ==1)
{
ten_flag = ar_to_in(c[sum_flag-1])+ar_to_in(b[sum_flag-1])+ar_to_in(sum[sum_flag]);
if(10 <= ten_flag)
{
sum[sum_flag-1] = in_to_ar(ten_flag/10);
}
sum[sum_flag] = in_to_ar(ten_flag%10);
}
else if(add_flag == 2)
{
ten_flag = ar_to_in(c[sum_flag-1])+ar_to_in(a[sum_flag-1])+ar_to_in(sum[sum_flag]);
if(10 <= ten_flag)
{
sum[sum_flag-1] = in_to_ar(ten_flag/10);
}
sum[sum_flag] = in_to_ar(ten_flag%10);
}
else if(add_flag ==0)
{
ten_flag = ar_to_in(b[sum_flag-1])+ar_to_in(a[sum_flag-1])+ar_to_in(sum[sum_flag]);
if(10 <= ten_flag)
{
sum[sum_flag-1] = in_to_ar(ten_flag/10);
}
sum[sum_flag] = in_to_ar(ten_flag%10);
}
sum_flag --;
}
for(int i=0;i<= max_length;i++)
{
if(sum[i] == '0')
{
continue;
}
else
printf("%c",sum[i]);
}
printf("\n");
}
大数相加demo记录贴
最新推荐文章于 2024-09-17 16:22:09 发布