1. 程式人生 > >大數運算(相加)

大數運算(相加)



具體程式碼如下 先放上錯誤程式碼​(只適合位數對齊的)

#include<stdio.h>

#include<string.h>

#define N 500

int main(void)

{

char s1[N],s2[N];

int cp=0,x,k;

int R[N];

gets(s1);

gets(s2);

//放上迴圈變數 i(跑s1),j(跑s2), k(給R裡面存值) 

int i=strlen(s1)-1;

int j=strlen(s2)-1;

k=N-1;

        while (i>-1&&j>-1)//陣列沒完就進迴圈

{

x=(s1[i--]-'0')+(s2[j--]-'0')+cp;

R[k--]=x%10;

cp=x/10;

}

if(cp)//要是cp還有值 就把進位加上去 

R[k--]=cp;

for(i=k+1;i<N;i++)//輸出數值 

printf("%d",R[i]);

return 0;

}​

下面附上正確程式碼:

​#include<stdio.h>

#include<string.h>

#define N 500

int main(void)

{

char s1[N],s2[N];

int cp=0,x,k;

int R[N];

gets(s1);

gets(s2);

//放上迴圈變數 i(跑s1),j(跑s2), k(給R裡面存值) 

int i=strlen(s1)-1;

int j=strlen(s2)-1;

k=N-1;

while (i>-1||j>-1)//只要有一個數組沒完就進迴圈

{

if(i>-1&&j>-1) //兩個都沒完

x=(s1[i--]-'0')+(s2[j--]-'0')+cp;

else if(j>-1&&i<0)//s1完了 s2沒完

x=s2[j--]-'0'+cp;//處理s2 

else

x=s1[i--]-'0'+cp;//處理s1 

R[k--]=x%10;

cp=x/10;

}

if(cp)//要是cp還有值 就把進位加上去 

R[k--]=cp;

//為什麼沒有讓cp=cp/10;呢??

//因為加法最多進位一位所以不需要哦。

//昨天的乘法有可能進兩位(100)所以要加上 

for(i=k+1;i<N;i++)//輸出數值 

printf("%d",R[i]);

return 0;

}

(程式碼是經過執行測試可以執行出結果的!!!)

    謝謝大家支援,我會盡快更新的,大家和我一起努力哦.

    我是小紙人.

具體程式碼如下 先放上錯誤程式碼​(只適合位數對齊的)

#include<stdio.h>

#include<string.h>

#define N 500

int main(void)

{

char s1[N],s2[N];

int cp=0,x,k;

int R[N];

gets(s1);

gets(s2);

//放上迴圈變數 i(跑s1),j(跑s2), k(給R裡面存值) 

int i=strlen(s1)-1;

int j=strlen(s2)-1;

k=N-1;

        while (i>-1&&j>-1)//陣列沒完就進迴圈

{

x=(s1[i--]-'0')+(s2[j--]-'0')+cp;

R[k--]=x%10;

cp=x/10;

}

if(cp)//要是cp還有值 就把進位加上去 

R[k--]=cp;

for(i=k+1;i<N;i++)//輸出數值 

printf("%d",R[i]);

return 0;

}​

下面附上正確程式碼:

​#include<stdio.h>

#include<string.h>

#define N 500

int main(void)

{

char s1[N],s2[N];

int cp=0,x,k;

int R[N];

gets(s1);

gets(s2);

//放上迴圈變數 i(跑s1),j(跑s2), k(給R裡面存值) 

int i=strlen(s1)-1;

int j=strlen(s2)-1;

k=N-1;

while (i>-1||j>-1)//只要有一個數組沒完就進迴圈

{

if(i>-1&&j>-1) //兩個都沒完

x=(s1[i--]-'0')+(s2[j--]-'0')+cp;

else if(j>-1&&i<0)//s1完了 s2沒完

x=s2[j--]-'0'+cp;//處理s2 

else

x=s1[i--]-'0'+cp;//處理s1 

R[k--]=x%10;

cp=x/10;

}

if(cp)//要是cp還有值 就把進位加上去 

R[k--]=cp;

//為什麼沒有讓cp=cp/10;呢??

//因為加法最多進位一位所以不需要哦。

//昨天的乘法有可能進兩位(100)所以要加上 

for(i=k+1;i<N;i++)//輸出數值 

printf("%d",R[i]);

return 0;

}

(程式碼是經過執行測試可以執行出結果的!!!)

    謝謝大家支援,我會盡快更新的,大家和我一起努力哦.

    我是小紙人.