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)。

妙啊!!!
在这里插入图片描述
在这里插入图片描述

©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页