3.1-3.2 %運算符、數位拆解

3.1 %運算符

C/C++中的%運算符要求(以 a%b 爲例):

  1. a,b 必須爲整型變量,不能是浮點數
  2. b 變量爲非 0 值

注意: 餘數符號與 a 一致,和 b 的符號無關!這與數論中關於餘數的定義不相符,可以對取得的餘數加上除數後再對該和求模

當a爲負數時,可以採用如下方法求餘:(a%b+b)%b

3.2 數位拆解

特殊乘法

1、題目和要求

時間限制:1s,內存限制:32MB,特殊判題:否
在這裏插入圖片描述

2、總結

1)題中說“可能有多組輸入”,使用cin.get()!=EOF實現。
2)當輸入數據爲0時,不會經過分解
解決:

  1. 在分解前判斷是否爲0。若爲0,則分解結果爲0;否則,進入while循環進行分解。
  2. 分解循環不使用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;
}

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