大數運算(相加)
具體程式碼如下 先放上錯誤程式碼(只適合位數對齊的)
#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;
}
(程式碼是經過執行測試可以執行出結果的!!!)
謝謝大家支援,我會盡快更新的,大家和我一起努力哦.
我是小紙人.