https://blog.csdn.net/qq_38003627/article/details/105127720
问题描述 :
有一种自然数,它的各位数字之和能被17整除。这个数的后继数(即这个数加1)的各位数字之和也能被17整除。求所有自然数中,从小到大第n个这样的数。
输入说明 :
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据占一行,其中仅有一个整数n(1≤n≤10)。在行首和行尾没有多余的空格。所有数据前后没有多余的空行,两组数据之间也没有多余的空行。
输出说明 :
对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的终端)依次输出一组对应的答案。每组答案占一行,每行中仅有一个整数,即题目描述中的第n个数。在行首和行尾不要输出多余的空格。在所有数据的前后,以及两组数据之间不要输出多余的空行。
输入范例 :
1
3
输出范例 :
8899
17899
#include <stdio.h>
//判断各位数字之和是否为17
int mod(int m) {
int j=0,a[30],s=0;
//取余取各位数字
while(m != 0) {
a[j]=m%10;
s += a[j];
m=m/10;
j++;
}
return s;
}
int main() {
int n=0,i=89,s1,s2,p,res[12],num;
//n<10,计算出前10个
while(n<11) {
s1=mod(i);
if(s1 % 17==0) { //若被17整除,判断后继数
p=i+1;
s2=mod(p);
if(s2 % 17==0) {
n++;
res[n]=i; //符合条件,存储在res[]中
}
}
i++;
}
while(scanf("%d",&num) != EOF) {
printf("%d\n",res[num]);
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int Mod(int m);
int main(void)
{
int n=0,i=89,a,b,p,r[12],s;
while(n<11){
a=Mod(i);
if(a%17==0){
p=i+1;
b=Mod(p);
if(b%17==0){
n++;
r[n]=i;
}
}
i++;
}
while(cin>>s){
cout<<r[s]<<endl;
}
return 0;
}
int Mod(int m){
int i=0,a[30],s=0;
while(m){
a[i]=m%10;
s+=a[i];
m=m/10;
i++;
}
return s;
}