nyoj-664-數字整除(水題)
阿新 • • 發佈:2017-05-20
表示 else font input 個數 過程 scan output 要求
數字整除
時間限制:1000 ms | 內存限制:65535 KB 難度:2- 描寫敘述
-
定理:把一個至少兩位的正整數的個位數字去掉,再從余下的數中減去個位數的5倍。當且僅當差是17的倍數時。原數也是17的倍數 。
比如,34是17的倍數,由於3-20=-17是17的倍數;201不是17的倍數。由於20-5=15不是17的倍數。
輸入一個正整數n,你的任務是推斷它是否是17的倍數。
- 輸入
- 輸入文件最多包括10組測試數據,每一個數據占一行,僅包括一個正整數n(1<=n<=10^100),表示待推斷的正整數。
n=0表示輸入結束,你的程序不應當處理這一行。
- 輸出
- 對於每組測試數據,輸出一行,表示對應的n是否是17的倍數。1表示是,0表示否。
- 例子輸入
-
34201209876541317171717171717171717171717171717171717171717171717180
- 例子輸出
-
1010
解題思路:
給定的定理太麻煩。我不知道怎麽用,題目要求的是推斷n是不是17的倍數,既然這樣。直接用原始的方法就好了。
我用的就是模擬數學法。將小學時學會的數學除法用代碼模擬處理其過程,應該註意的是循環結束不代表計算結束。now還差一步運算。
代碼
#include<stdio.h> #include<string.h> char s[110]; int main() { int i,j; int len,now; while(scanf("%s",s)&&strcmp(s,"0")!=0) { len=strlen(s); now=0; for(i=0;i<len;i++) { if(now<17) now=now*10+s[i]-'0'; else { now%=17; now=now*10+s[i]-'0'; } }//模擬數學除法運算 if(now%17==0) //循環結束不代表計算結束。now還有值 printf("1\n"); else printf("0\n"); } return 0; }
nyoj-664-數字整除(水題)