最基本的乙個運算,可以用陣列或指標做
一.加法
1.自己的**,真是一點都不簡潔,水平有限啊!
#include
#include
int max(int len1, int len2)
int main()
for (int i = 0; i < len1 - len2; i++)
s2[i] = '0';
}if (len1 < len2)
for (int i = 0; i < len2 - len1;i++)
s1[i] = '0';
}int n = max(len1, len2) - 1;
s[n] = (s1[n] + s2[n]-96)%10;
for (int i = n-1; i >= 0; i--)
for (int i = 0; i <= n; i++)
printf("%d", s[i]);
printf("\n");
return
0;}
2.網上的**(poj1503)
可以計算多個相加並且簡潔,膜拜
#include
#include
#include
char s[101];
intsum[101];
int main()
}j=101-1; //這裡要-1,否則後面sum[j]陣列越界
while(!sum[j]) --j; //重新賦值j 使j為目前sum的總位數
for (i=0;i//如果sum[i]加成兩位數 將十位數加給前一位數
sum[i+1]+=sum[i]/10;
sum[i]=sum[i]%10;
}for (i=j; i>=0; --i)
printf("\n");
return
0;}
二.減法
1.自己寫的**
還是寫的又臭又長,無奈,**水平有限,不過應該可以改進,懶得弄了
#include
#include
char s1[100], s2[100];
int a[100] = , b[100] = ;
int sum[200] = ;
//分開來討論,都先較大數減較小數
void more(int n1, int n2)//第乙個數長度大於第二個數
else
sum[i] = a[i] - b[i];
}for (int i = n1 - 1; i >= 0; i--)
printf("%d", sum[i]);
printf("\n");
}void less(int n1, int n2)//第乙個數長度小於第二個數
else
sum[i] = b[i] - a[i];
}printf("-"); //前面加乙個負號
for (int i = n2 - 1; i >= 0; i--)
printf("%d", sum[i]);
printf("\n");
}int main()
return
0;
}
看了一下網上的**好像也沒有特別簡潔的,感覺我這寫的也不錯了
三:乘法
要點:
1.乘法中有個規則:假如結果的下標為m
sum[m]=a[0]*b[m]+a[1]*b[m-1]+a[2]*b[m-2]……a[m]*b[0]
2.先將所有的數加到一起得到所有的sum[m],再對sum進行進製操作
即跟上面大數的加法的大神**思路一致
第一點我想到了,然而第二點沒想到,做半天做不出,無奈,**轉換能力太差
下面的**是在網上的**的基礎上改的,原先的有點小錯誤
#include
#include
int main()
else
//確保ans2位數比ans1小
if (len1 < len2)//確保len2是比較小的數,這樣好理清思路
for (i = 0; i < len2; i++) //這裡牽涉到一些數學知識如上
for (j = 0; j < len1; j++)
ans[i+j] = ans[i+j] % 10;
}if(ans[len1+len2-1]!=0) //判斷最前面的那個是否為0,為0則跳過
printf("%d",ans[len1+len2-1]);
for (i = len1+len2 - 2; i >= 0; i--)
printf("\n");
return
0;}
學了一年了,現在可以用c++的類來實現這個問題,感覺還是有挺大進步的。
#include
#include
#include
#include
#include
#include
using
namespace
std;
class bignumber
bignumber operator=(long
long num)
while (num > 0);
return *this;
}bignumber operator=(const
string &str)
return *this;
}friend ostream & operator
<<(ostream &os, const bignumber &x)
friend istream & operator >> (istream &is, bignumber &x)
//四則運算
bignumber operator+(const bignumber &b) const
return c;
}//比較運算
bool
operator
<(const bignumber &b) const
return
false;//相等
}bool
operator>(const bignumber &b) const
bool
operator
<=(const bignumber &b) const
bool
operator>=(const bignumber &b) const
bool
operator!=(const bignumber &b) const
bool
operator==(const bignumber &b) const
};int main()
return
0;}
大數加減乘除
include include include include includeusing namespace std compare比較函式 相等返回0,大於返回1,小於返回 1 int compare string str1,string str2 if cf 0 str char cf 0 st...
大數加減乘除
對於大數的加減乘除都要先把輸入的大數字串轉成倒序的陣列,再進行運算。字串的處理 scanf s s a1,b1 len 0 for int i strlen a1 1 i 0 i len 0 for int i strlen b1 1 i 0 i len max strlen a1 strlen b...
大數的加減乘除
當數的位數非常大而常規的資料型別不足以儲存的時候,可以考慮使用大數。即用乙個長的陣列來儲存相應的位數,如int a 100 a的每一位儲存一位數字或幾位數字,根據常規的加減乘除運算對陣列進行操作。使用string型別對陣列進行操作,雖然比用整型簡便,但可 能增加了執行時間。pku1001 expon...