PTA刷題筆記(C語言) | 7-42 整除光棍 (20分)

開始刷題,感覺代碼量和基礎太渣了,導致數據結構不會,重頭慢慢刷吧~
在這裏插入圖片描述


1、題目

在這裏插入圖片描述
輸入樣例:

31

輸出樣例:

3584229390681 15


2、代碼

#include<stdio.h>
int main(){
	int x;
	scanf("%d",&x);
	int cnt=0;
	int a=0,c=0,d;
	while(a<x){
		a=a*10+1;
		cnt++;
	}
	while(1){
		printf("%d",a/x);
		a%=x;
		if(a==0) break;
		a=a*10+1;
		cnt++;
	}
	printf(" %d",cnt);
	
	return 0;
}

在這裏插入圖片描述

3、討論

這個題很有意思的哈,本來以爲就是個 “簡單” 題,用循環不斷乘10加1,果然有兩個 test 超時了,然後,,,就沒有然後了。

#include<stdio.h>
#include<math.h>
int main(){
	int x;
	scanf("%d",&x);
	int i;
	int cnt=0;
	long long int a=0,c=0,d;
	while(1){
		a=a*10+1;
		cnt++;
		c=a/x;
		d=a%x;
		if(d==0){
			printf("%lld %d",c,cnt);
			break;
		}
	}
//	printf("%lld %d",c,cnt);
	
	return 0;
}

在這裏插入圖片描述
上網一搜,發現了一個奇淫技巧,就是模擬除法的運行,即:
在這裏插入圖片描述
什麼意思呢?

就是隻先生成一部分光棍數,在例子裏是111,然後進行除法,相當於是從最高位開始計算結果(手寫除法運算的步驟),當餘數不爲0,就在餘數末尾加1當除數(不是加法的加,而是拼湊的意思,即1“加”1,是11)。

妙啊!!!
在這裏插入圖片描述
在這裏插入圖片描述

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