1007
题目:本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立
思路:对于数字元素拆分,除法的计算方法用代码实现(唯一一点就是在输出的时候首元素按照输出的格式是不能有0的情况存在)
以下是我初次通过本地测试成功的代码,但是在上传到牛客的时候出现,实际结果没有输出q数组,我就很奇怪,我使用了相同测试用例到本地没有问题,但是在网上就是通过不了。
#include<iostream>
#include<cstdio>
#include<string>
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<str.length(); i++) {
mode=mode*10+((int)str[i]-'0');
q[i]=(char)mode/n+'0';
mode%=n;
len++;
}
for(int i=0; i<len; i++) {
if(i==0&&q[i]=='0') {
continue;
}
printf("%c",q[i]);
}
printf(" %d",mode);
return 0;
}
参考代码:
#include<iostream>
#include<string>
using namespace std;
int main(){
string a;
int b;
cin>>a>>b;
int yu = a[0] - '0';
for(int i = 1;i<a.size();i++){
int tem = yu*10+ (a[i] - '0');
cout<<tem/b;//输出结果
yu = tem %b;
}
cout<<" "<<yu;//输出结果
return 0;
}
然后就学会了:以后在获取到结果的时候,能通过使用for循环输出结果。这样就又省了一次for循环,减少代码运行的时间
改进代码:(以下代码就能顺利通过测试用例)
#include<iostream>
#include<cstdio>
#include<string>
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<str.length(); i++) {
mode=mode*10+((int)str[i]-'0');
q[i]=(char)mode/n+'0';
mode%=n;
if(i==0&&q[i]=='0') {
continue;
}
printf("%c",q[i]);
}
printf(" %d",mode);
return 0;
}
总结
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位正整数,请编写程序演示到达黑洞的过程。
#include<iostream>
#include<cstdio>
#include<algorithm>
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;
}
总结
尽量观察输出结果与获取的输入之间的连接,能少写代码就少写