#include <stdio.h>
#include <string.h>
#define MAX 1000
void my_and(char a[],char b[],int m,int n)
{
int i=n-1;
int j=m;
char add[MAX];//计算结果保存
add[m+1]='\0';//字符串结束标志
add[m]='0';//赋初值
for (j=m;j>0;j--)
{
if (i>=0)//低位开始计算,直至小的数结束
{
add[j]=add[j]+a[j-1]+b[i]-'0'-'0';//两个数相加保存于add中
i--;
}
else
{
add[j]=add[j]+a[j-1]-'0';//小的数加完,只加大的数
}
if (add[j]>'9')//有进位
{
add[j]=add[j]-10;//该位减10
add[j-1]='1';//高位赋初值,进1
}
else
add[j-1]='0';//高位赋初值,无进位
}
if (add[0]=='0')//前导0不输出
printf ("result=%s\n",add+1);//地址偏移
else
printf ("result=%s\n",add);
}
int main(void)
{
char num1[MAX],num2[MAX];//定义两个字符数组用于接受数据
int n,m;
printf ("please input num1 :");
fgets(num1,sizeof(num1),stdin);//接收第一个数
if (num1[strlen(num1)-1]=='\n')//fets()会接收回车存储在字符串中
num1[strlen(num1)-1]='\0';
printf ("please input num2 :");
fgets(num2,sizeof(num2),stdin);//接收第二个数
if (num2[strlen(num2)-1]=='\n')
num2[strlen(num2)-1]='\0';
printf ("num1: %s\nnum2: %s\n",num1,num2);
m=strlen(num1);
n=strlen(num2);//计算数的长度,即位数
if (m>=n)// 大数在前,小数在后,调用函数
my_and(num1,num2,m,n);
else
my_and(num2,num1,n,m);
return 0;
}
C语言——大数加法
于 2018-08-02 16:38:26 首次发布