nyy 发表于 2022-11-1 13:32:37

这个代码错在什么地方?

#include <iostream>
using namespace std;

int GetDigit(long long n,long long d);
//主函数
int main( )
{
    long long aa=12345678LL;
    //long long bb=aa%(10000);//为什么这样写是对的
    long long bb=aa%(10^4);//为什么这样写就是错误的?
   
    printf("输出数字%d\n",bb);
   
    system("pause");
    return 0;
}

偷懒把10000写成
long long bb=aa%(10^4);//为什么这样写就是错误的?
结果答案就错误了!
请问为什么?

long long bb=aa%(10000);//为什么这样写是对的
这个能输出正确结果
5678

long long bb=aa%(10^4);//为什么这样写就是错误的?
这个输出错误结果
2
为什么呢?
如何修改正确呢?
在不修改long long变量类型的情况下,如何把程序搞对?

nyy 发表于 2022-11-1 13:45:04

我知道了^不是幂函数的意思

nyy 发表于 2022-11-1 14:04:57

原本是想用C语言解决这个问题的
https://bbs.emath.ac.cn/forum.php?mod=viewthread&tid=73&fromuid=14149
但是没想到溢出之类的问题在C语言上真啰嗦!

nyy 发表于 2022-11-1 15:10:34

对了,如何修正呢?用pow似乎也修正不了

XIAOWEN 发表于 2023-4-26 15:05:22

这个代码的错误在于 bb=aa%(10^4) 这一行,这并不是计算 aa 除以 10000 的余数。^ 符号在 C++ 中表示按位异或,而不是指数运算。

正确的计算 aa 除以 10000 的余数的方法是 aa % 10000,因为 % 符号表示取模运算,可以计算出两个数相除得到的余数。


#include <iostream>
using namespace std;

int GetDigit(long long n,long long d);

//主函数
int main( )
{
    long long aa = 12345678LL;
    long long bb = aa % 10000; // 计算 aa 除以 10000 的余数
   
    printf("输出数字%lld\n", bb);
   
    system("pause");
    return 0;
}

nyy 发表于 2023-4-26 15:17:36

XIAOWEN 发表于 2023-4-26 15:05
这个代码的错误在于 bb=aa%(10^4) 这一行,这并不是计算 aa 除以 10000 的余数。^ 符号在 C++ 中表示按位异 ...

我上面自己已经找到错误了,其实只有自己找到错误,这样才能印象深刻!
页: [1]
查看完整版本: 这个代码错在什么地方?