Kevin_Sun_2007 2019-03-02 21:56 采纳率: 66.7%
浏览 518
已采纳

c++拆数并判断出现问题

请看一下我的代码,题目:输入正整数n,输出所有小于等于n的与7无关的数:不能被7整除,且其每一位数字都不等于7。

#include<iostream>
using namespace std;
int main(){
    int n,x=0,y=0,i;
    cin>>n;
    for(i=1;i<=n;i++){
        x=i;
        while(x!=0){ //拆数,此处出问题
        y=x%10;
        x=x*10;
        }
        if(i%7!=0&&y!=7){
            cout<<i<<" ";
        }

    }
    return 0;
}

例如我输入20,则输出1 2 3 4 5 6 8 9 10 11 12 13 15 16 17 18 19 20,带有17

  • 写回答

1条回答 默认 最新

  • 柰茶 2019-03-02 22:14
    关注

    你的拆数用了while循环,当输入两位数是肯定会出错啊。你想想,17为例,第一次循环17 % 10 得7,但x此时并不等于0,还要加一次循环,下一次循环y就不是7而是1了,这样子你的算法只满足一位数不满足两位数及以上。我觉得你可以在while循环里加个if判断,
    if(y == 7)
    {
    break;
    }
    即当判断到数字中有7时直接跳出即可。

    —————————————分割线————————————————
    补充:修改后源码为:

    #include<iostream>
    using namespace std;
    int main(){
        int n,x=0,y=0,i;
        cin>>n;
        for(i=1;i<=n;i++){
            x=i;
            while(x!=0){ //拆数,此处出问题
                y=x%10;
                if(y == 7)     //此处只要判断到有7就直接跳出即可
                {
                    break;
                }
                //x=x*10;
                x = x / 10;//此处应该要用除,取余完个位后把个位除掉
            }
            if(i%7!=0&&y!=7){
                cout<<i<<" ";
            }
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站