吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1614|回复: 14
收起左侧

[C&C++ 转载] C语言编程问题求助

[复制链接]
ZoRoLOVE 发表于 2021-2-25 13:49
请问为什么这个while循环中的n不递增呢,输出老是相同值陷入了死循环,应该如何修改;
#include<stdio.h>
#include<math.h>
int main()
{
    int a=123,b=1024,c,r;
   while(1){
           c=a%13;
           int n=1;
           r = (int)pow(c,n) % 13;
           n++;
           printf("%d",r);
           printf("%d",n);
           if (r==1){break;
           }
              
   }
   
}

免费评分

参与人数 1吾爱币 +1 收起 理由
领悟者的涂鸦笔 + 1 n在每次循环都被重新改为了1再开始。

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

answer_zhang 发表于 2021-2-25 14:49
看了半天也没看出楼主想要实现啥算法,
两个问题:
1. n的初始化需要放在while循环外面或者加上static
2. 取值范围的问题,想要退出循环,满足r==1, 只有当n=12时才满足,可是当n=11时,pow(c,n)的返回值就已经超过了int的取值范围,溢出了,所以需要将pow()的返回值类型转换为unsigned
[C] 纯文本查看 复制代码
#include<stdio.h>
#include<math.h>

int main()
{
    int a = 123, b = 1024, c, r;
    while(1) {
        c = a % 13;
        static int n = 1;
        r = (unsigned) pow(c, n) % 13;
        n ++;
        printf("r = %d, n = %d\n", r, n);
        if(r == 1)
            break;
    }
    return 0;
}
superbzw 发表于 2021-2-25 13:55
quanxiaodai 发表于 2021-2-25 13:50
 楼主| ZoRoLOVE 发表于 2021-2-25 14:07
superbzw 发表于 2021-2-25 13:55
int n=1;
你放错地方了,每次都初始化了

把int n=1;放到while循环外结果还是不对,运行结果是-1000多开始递减
2569138941 发表于 2021-2-25 14:54
ZoRoLOVE 发表于 2021-2-25 14:07
把int n=1;放到while循环外结果还是不对,运行结果是-1000多开始递减

一开始并不是负数,是因你算法问题,在6的12方后,其值超过了int的最大值2147483647,所以当n为12以后,你的r开始输出为负数,且恒为-11,但n仍在递增,所以看上去为-11n(n的值),其实是组合值,并不是-1000多。
tianruo1987 发表于 2021-2-25 15:02
本帖最后由 tianruo1987 于 2021-2-25 15:03 编辑

ZoRoLOVE 发表于 2021-2-25 14:07
把int n=1;放到while循环外结果还是不对,运行结果是-1000多开始递减

我这里运行没错,输出从n=2 开始的。
如下:
#include<stdio.h>
#include<math.h>
int main()
{
    int a=123,b=1024,c,r;
    int n=1;
   while(1){
           c=a%13;
           r = (int)pow(c,n) % 13;
           n++;
           printf("r = %d ",r);
           printf("n = %d",n);
           printf("\r\n ______ \r\n");
           if (r==1){break;
           }
              
   }
   
}
图片.png
zsjalive 发表于 2021-2-25 15:44
把int n=1,放到while外面.
fassposs 发表于 2021-2-25 17:27
int n前面加static,变为静态变量 ,只初始化一次就行了
蟹老板阿 发表于 2021-2-26 14:58
n=1 移到while外面去
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-5 17:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表