m0_62117400 2021-09-25 14:14 采纳率: 100%
浏览 124
已结题

对于正整数n,不存在整数k,使得n等于k加上k的数码累加和,我们称这样的数是哥伦比亚数或者自我数。

题目描述
对于正整数n,不存在整数k,使得n等于k加上k的数码累加和,我们称这样的数是哥伦比亚数或者自我数。
比如 11就不是一个哥伦比亚数,因为10加上10的数码累加和1等于11;而20则是一个哥伦比亚数。

输入
第一行是一个整数K(K≤10,000),表示样例的个数。
以后每行一个正整数n(1≤n≤1,000,000,000)

输出
每行输出一个样例的结果,如果是哥伦比亚数输出"Yes",否则输出"No"。

样例输入
5
1
2
3
20
21
样例输出
Yes
No
Yes
Yes
No

#include<stdio.h>
int main()
{
        int k,n,b,a,x,m,c=0,j,i=1,s=0;
        scanf("%d",&k);
        while(k--)
        {
            scanf("%d",&n);
            a=n;//a为数本身
            x=n;
            for(a;a>0;a--)
            {
                if(a==1)
                {
                    c=0;
                    break;
                }
                c=0;
                m=a;
                b=a;
              while(m>=10)
               {
                   m=m/10;
                   i++;//i表示位数
               }
               for(j=0;j<i;j++)
               {
                   s=b%10+s;//s为各位数和
                   b=b/10;
               }
               if(a+s==n)
               {
                   c=1;
                   break;
               }
            }
            if(c==1)
            {
                printf("No\n");
            }
            else
            {
                printf("Yes\n");
            }
        }
}

我想知道我哪里错了,求解

  • 写回答

2条回答 默认 最新

  • SY_XLR 2021-09-27 13:13
    关注

    供参考

    #include <stdio.h>
    int main()
    {
        int n,i,y,mark,sum,k;
        scanf("%d",&k);
        while(k--)
        {
            mark=1;    
            scanf("%d",&n);
            for(i=0;i<=81;i++)
            {
                
                y=n-i;
                if(y-i>=0)
                {
                    sum=n-i;
                    while(y)
                    {
                        sum+=y%10;
                        y/=10;
                    }
                    if(sum==n)
                    {
                        mark=0;
                        break;//跳出循环
                    }
                }
                else
                {
                    break;//跳出循环
                }
            }
            if(mark==0)
            {
                printf("No\n");
            }
            else
            {
                printf("Yes\n");
            }
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月5日
  • 已采纳回答 9月27日
  • 创建了问题 9月25日

悬赏问题

  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作