編程學習-大整數加法(C語言版)

編程:大整數加法(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;
}

//總結:注意把一個大問題分成一個個小問題,用函數的方法進行處理;注意各//步驟的順序,每一步要注意值的變化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章