1029练习题 A

1029练习题 A

KONO题面哒!

问题描述
定义函数 f(x) 为组成 x 的各位数字之和,如 f(2018) = 2 + 0 + 1 + 8 = 11 . 给定一个正整数 n 求所有满足条件 f(x) + x = n 的 x .

输入格式
共一行,一个正整数 n 。

输出格式
第一行一个整数 ans 表示有多少个整数 x 满足条件。 下接 ans 行,每行一个整数表示满足条件的 x 。

样例输入 1
8
样例输出 1
1
4

样例输入 2
818
样例输出 2
2
796
805

爆 炸 数 据
969743458687311104
爆 炸 输 出
2
969743458687310998
969743458687311016

数据范围
$N \leq {10}^{18}$


我自己的方法是真的鬼才


暴力乱搞题。20min内搞定。

由于每位的和最大为$9*17=153$,所以可以从1开始枚举每位的和,然后再验证剩下的数的每位的和是不是枚举出来的数。

所以暴力才是正道啊


KONO代码哒!

已读
#include <stdio.h> 
#include <bits/stdc++.h> 
using namespace std; 
#define ri register int 
#define rll register long long 
inline long long read() 
{ 
    long long f=1,x=0; 
    char s=getchar(); 
    while(s<'0'||s>'9') 
    { 
         if(s=='-') 
             f=-1; 
        s=getchar(); 
    } 
    while(s>='0'&&s<='9') 
    { 
         x=x*10+s-'0'; 
         s=getchar(); 
    } 
    return x*f; 
} 
long long N,Ans[182],Num,T,Res,cnt,Sum,tot; 
int main() 
{ 
    N=read(); 
    for(rll i=1LL;i<=181LL;i++) 
    { 
        Res=T=N-i; 
        Sum=0; 
        for(cnt=0;Res;cnt++) 
        { 
            Sum+=(Res%10); 
            Res=Res/10; 
        } 
        if(Sum==i) 
        { 
            Ans[++Num]=T; 
        } 
    } 
    printf("%lld\n",Num); 
    for(rll i=Num;i>0;i--) 
    { 
        printf("%lld\n",Ans[i]); 
    } 
    return 0; 
}

这个是WZJ大佬的代码,不敢把自己的憨批代码放上来

猜你喜欢

转载自www.cnblogs.com/cooper233/p/11761702.html
今日推荐