1007、1009:与进制问题、输出问题

1007

题目:本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立

思路:对于数字元素拆分,除法的计算方法用代码实现(唯一一点就是在输出的时候首元素按照输出的格式是不能有0的情况存在)

以下是我初次通过本地测试成功的代码,但是在上传到牛客的时候出现,实际结果没有输出q数组,我就很奇怪,我使用了相同测试用例到本地没有问题,但是在网上就是通过不了。

#include
#include
#include
using namespace std;

int main() {
	string str;
	int n,len;
	freopen("i.txt","r",stdin);
	char q[1001];
	cin>>str>>n;
	int mode=0;
	for(int i=0; i

参考代码:

#include
#include
using namespace std;
int main(){
    string a;
    int b;
    cin>>a>>b;
    int yu = a[0] - '0';
    for(int i = 1;i

然后就学会了:以后在获取到结果的时候,能通过使用for循环输出结果。这样就又省了一次for循环,减少代码运行的时间

改进代码:(以下代码就能顺利通过测试用例)

#include
#include
#include
using namespace std;

int main() {
	string str;
	int n,len;
	// freopen("i.txt","r",stdin);
	char q[1001];
	cin>>str>>n;
	int mode=0;
	for(int i=0; i

总结

1.使用for循环顺手输出结果

2.字符转数字是使用了字符数字与字符数字‘0’的差值获取了整型数字

3.使用取余数的方式可以获取一串数字里面的元素。

1009

简单,但是麻烦

题目:

给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到
 一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。
 
 例如,我们从6767开始,将得到
 
 7766 - 6677 = 1089
 9810 - 0189 = 9621
 9621 - 1269 = 8352
 8532 - 2358 = 6174
 7641 - 1467 = 6174
 ... ...
 
 现给定任意4位正整数,请编写程序演示到达黑洞的过程。

1007、1009:与进制问题、输出问题_第1张图片

 

#include
#include
#include

using namespace std;
bool cmp(int a,int b) {
	return a>b;
}

int main() {
	// freopen("in.txt","r",stdin);
	int num;
	cin>>num;
	do{
		int n[4];
		for(int i=3; i>=0; i--) {
			n[i]=num%10;
			num=num/10;
		}
		sort(n,n+4,cmp);
		printf("%d%d%d%d - %d%d%d%d = ",n[0],n[1],n[2],n[3],n[3],n[2],n[1],n[0]);
		num=(n[0]*1000+n[1]*100+n[2]*10+n[3])-(n[3]*1000+n[2]*100+n[1]*10+n[0]);
		printf("%d\n",num);	
	}while(num!=6174);
	return 0;
}

总结

尽量观察输出结果与获取的输入之间的连接,能少写代码就少写

你可能感兴趣的:(算法,c++,c语言)