3.1 %運算符
C/C++中的%運算符要求(以 a%b 爲例):
- a,b 必須爲整型變量,不能是浮點數
- b 變量爲非 0 值
注意: 餘數符號與 a 一致,和 b 的符號無關!
這與數論中關於餘數的定義不相符,可以對取得的餘數加上除數後再對該和求模
。
當a爲負數時,可以採用如下方法求餘:(a%b+b)%b
3.2 數位拆解
特殊乘法
1、題目和要求
時間限制:1s,內存限制:32MB,特殊判題:否
2、總結
1)題中說“可能有多組輸入”,使用cin.get()!=EOF
實現。
2)當輸入數據爲0
時,不會經過分解。
解決:
- 在分解前判斷是否爲
0
。若爲0,則分解結果爲0;否則,進入while循環進行分解。 - 分解循環不使用
while
,而使用do-while
。這樣無論是否是0,都會先執行一遍。
3、思路
思路1: 使用int
存儲數據,x%10
得到個位上的數字,x/10
將十位數字移動到個位。不斷重複,直到x==0
。
思路2: 使用string、char[]
存儲,把 ASCII 轉換爲數字後直接計算。
4、代碼
1)使用int
存儲數據。
#include <iostream>
using namespace std;
#define N 10
int main()
{
do
{
int num1,num2;
int n1[N],n2[N];
int value=0;
int i=0,j=0;
cin>>num1>>num2;
while(num1!=0)
{
n1[i++] = num1%10;
num1 = num1/10;
}
while(num2!=0)
{
n2[j++] = num2%10;
num2 = num2/10;
}
for(int m = i-1; m>=0; m--)
{
for(int n = j -1; n>=0; n--)
{
value = value + n1[m]*n2[n];
}
}
cout<<value<<endl;
}
while(cin.get()!=EOF);
return 0;
}
2)使用string
存儲。
#include <iostream>
using namespace std;
#define N 10
int main()
{
do
{
string num1,num2;
int value=0;
cin>>num1>>num2;
for(int m = 0; m<num1.length(); m++)
{
for(int n = 0; n<num2.length(); n++)
{
value = value + (int)(num1[m]-'0')*(int)(num2[n]-'0');
}
}
cout<<value<<endl;
}
while(cin.get()!=EOF);
return 0;
}