題目連結
題意:
每組測資包含兩個數字(位數不一定相同),計算加法過程進位的次數
解法:
必須從個位開始,因為前一位的進位可能影響下一位數。
因此,如果有進位,計算下一位時要特別加上。
另外,位數不同也要能計算,如: 99跟1,個位發生進位。
十位只有9,加上個位進位,所以也有進位,答案是2次。
程式(Java):
題意:
每組測資包含兩個數字(位數不一定相同),計算加法過程進位的次數
解法:
必須從個位開始,因為前一位的進位可能影響下一位數。
因此,如果有進位,計算下一位時要特別加上。
另外,位數不同也要能計算,如: 99跟1,個位發生進位。
十位只有9,加上個位進位,所以也有進位,答案是2次。
程式(Java):
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//計算兩個同位數相加時共有幾個位發生進位 | |
import java.util.*; | |
class Main{ | |
public static void main(String args[]){ | |
Scanner input = new Scanner(System.in); | |
while (input.hasNext()){ | |
int times = 0; | |
int carry = 0; | |
int A = input.nextInt(); | |
int B = input.nextInt(); | |
if (A == 0 && B == 0) | |
break; | |
while (A!=0 || B!=0){ | |
if (A%10 + B%10 + carry >= 10){ | |
times++; | |
carry = 1; | |
} | |
else | |
carry = 0; | |
A /= 10; | |
B /= 10; | |
} | |
if (times == 0) | |
System.out.println("No carry operation."); | |
else { | |
if (times == 1) | |
System.out.println("1 carry operation."); | |
else | |
System.out.println(times + " carry operations."); | |
} | |
} | |
} | |
} |
你好,我最外圍迴圈的寫法是while(A!=0 && B!=0)
回覆刪除可是當我輸入100和0的時候,竟然和輸入0和0的情況一樣,什麼都不做就直接跳出去了,想請教一下為什麼會這樣呢
對齁!真是不好意思見笑了,問了個笨問題!^^u
回覆刪除不過還有個想問的地方,不知道是否方便再打擾呢?因為我個人的寫法是習慣在進入迴圈之前就先把變數做宣告(我的程式:https://paste.plurk.com/show/2696073/)
然後我在cmd裡面測試,無論是99 1、100 0或其他數字都是ok的,但是丟到uva以後卻都顯示為錯誤。
後來我測了很久,最後像大大您一樣,把變數的宣告寫在迴圈開頭,把最外圍的while條件改成true,以及加上if{break}的片段才通過。(成功的程式:https://paste.plurk.com/show/2696074/)
想請教一下真的是我的寫法有問題嗎?
每一組測資都必須從新開始計算,變數都要重設 所以只要記得在迴圈執行每一步前先重設即可 仔細看你的兩支程式,其實兩種寫法都沒錯 第一種重設寫在外面的 while(A!=0 || B!=0) 結尾 第二種寫在 while(true) 之後 只是第一種你漏掉了 carry = 0 (也因此只有在少部分會出錯)
刪除