1、注意输出要最小值
2、我是先字符串输入,求长度,最关键为了不让他的时间复杂度太大,要确定大致范围,即strlen*9,即时最大,完全可以保障所有的都包括。
#include<stdio.h>
#include<string.h>
int main(){
int n;
scanf("%d\n",&n);
char a[100];
int i,k,j,h,s,min;
for(i=0;i<n;i++){
int flag=1;
k=0;
int sum=0;
fgets(a,100,stdin);
k=strlen(a)-1;
for(s=0;s<k;s++){
sum=sum*10+a[s]-'0';
}
j=k*9;
for(h=sum;h>=sum-j;h--){
int count=0;
int num=h;
while(num/10!=0) {
count+=num%10;
num=num/10;
}count+=num;
if(sum==count+h){
min=h;
flag=0;
}
}
if(flag==0){
printf("%d\n",min);
}
else {
printf("0\n");
}
}
return 0;
}
这是fgets输入,但是他比较奇怪,scanf("%d\n",n);避免fgets直接输入'\n';
#include<stdio.h>
#include<string.h>
int main(){
int n;
scanf("%d",&n);
char a[100];
int i,k,j,h,s,min;
for(i=0;i<n;i++){
int flag=1;
k=0;
int sum=0;
scanf("%s",a);
k=strlen(a);
for(s=0;s<k;s++){
sum=sum*10+a[s]-'0';
}
j=k*9;
for(h=sum;h>=sum-j;h--){
int count=0;
int num=h;
while(num/10!=0) {
count+=num%10;
num=num/10;
}count+=num;
if(sum==count+h){
min=h;
flag=0;
}
}
if(flag==0){
printf("%d\n",min);
}
else {
printf("0\n");
}
}
return 0;
}
而scanf(”%s“)不用;