iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0
自我挑戰組

用 C & C++ 帶你手把手解 UVa 一顆星選集系列 第 20

Day 0x14 UVa10035 Primary Arithmetic

題意

  • 輸入兩整數,求相加的過程需要進位幾次
  • 需要注意的有:
    1. 重複輸入兩整數直到 0 0
    2. 輸出格式
      • No carry operation.
      • 1 carry operation.
      • N carry operations. (N > 1)

解法

  • while 重複輸入兩整數,直到兩者皆為 0

    這題因為有限定輸入範圍 < 10 digits
    不然需要大數相加的概念

    int n, m;
    
    while(scanf("%d %d", &n, &m) && (n || m)){
        ...
    }
    
  • 透過 while 迴圈控制,若有一數 > 0 便繼續計算;每次迴圈都用 if 檢查個位數 (% 10) 相加是否需要進位,若有則 carry++temp 儲存進位值 (1 or 0);每次迴圈都將兩數 ÷ 10,以便計算下次的個位數
    while(n || m){
        if((n % 10) + (m % 10) + temp >= 10){
            carry++;
            temp = 1;
        }
        else{
            temp = 0;
        }
        n = n / 10;
        m = m / 10;
    }
    
  • C code
    #include<stdio.h>
    
    int main(){
    
        int n, m;
    
        while(scanf("%d %d", &n, &m) && (n || m)){
            int i;
            int carry = 0;
            int temp = 0;
    
            while(n || m){
                if((n % 10) + (m % 10) + temp >= 10){
                    carry++;
                    temp = 1;
                }
                else{
                    temp = 0;
                }
                n = n / 10;
                m = m / 10;
            }
    
            if(carry == 1){
                printf("1 carry operation.\n");
            }
            else if(!carry){
                printf("No carry operation.\n");
            }
            else{
                printf("%d carry operations.\n", carry);
            }
        }
    
        return 0;
    }
    

上一篇
Day 0x13 UVa299 Train Swapping
下一篇
Day 0x15 UVa10056 What is the Probability ?
系列文
用 C & C++ 帶你手把手解 UVa 一顆星選集30

尚未有邦友留言

立即登入留言