C語言——大數加法
#include <stdio.h>
#include <stdlib.h>
#include <time.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';//賦初值,無進位
}
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')
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;
}