1. 程式人生 > >nyoj-664-數字整除(水題)

nyoj-664-數字整除(水題)

表示 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-數字整除(水題)