編程:大整數加法(C語言版)
//題目:大整數加法,假定最多隻有101位
//思路:用字符數組形式進行大整數的輸入,然後將數組前後交換順序(con//vert函數,因爲加法是從最低位加起的),然後將字符數組變成數字形式//(shuzi函數),進行加法(add函數),最後就是輸出了,用(print函數)。
#include<stdio.h>
#include<string.h>
void convert(char num[])
{
int l,i,j;
j=100;
l=strlen(num);
for(i=0;i<l;i++)
{
num[j]=num[i];
j--;
}
while(j>=0)//把多餘的位置變成字符0
{
num[j]='0';
j--;
}
}
void shuzi(char num[])
{
int i;
for(i=0;i<=100;i++)
{
num[i]=num[i]-'0';
}
}
void add(char num1[],char num2[])
{
int i;
for(i=100;i>0;i--)
{
num1[i]=num1[i]+num2[i];
if(num1[i]>=10)
{
num1[i-1]=num1[i-1]+num1[i]/10;//這步和下步的順序一定不能交換,否則進位會失敗。
num1[i]=num1[i]%10;
}
}
}
void print(char num[])
{
int i=0;
while(num[i]==0)
{
i++;
}
for(i=0;i<101;i++)
{
printf("%d",num[i]);
}
}
int main()
{
char num1[101],num2[101];
scanf("%s",num1);
getchar();
scanf("%s",num2);
getchar();
convert(num1);
convert(num2);
shuzi(num1);
shuzi(num2);
add(num1,num2);
print(num1);
return 0;
}
//總結:注意把一個大問題分成一個個小問題,用函數的方法進行處理;注意各//步驟的順序,每一步要注意值的變化。