【问题标题】:Why does my function returning long long, returns 705032704?为什么我的函数返回 long long,返回 705032704?
【发布时间】:2019-10-07 12:37:44
【问题描述】:

我正在编写一个代码,该代码返回给定字符串和基数的基数为 10 的值。但是对于以 10 为底的大数值,我的程序只返回 705032704。

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;

    int val(char c)
    {
        if (c >= '0' && c <= '9')
            return (int)c - '0';
        else
            return (int)c - 'A' + 10;
    }

            long long basemachine(int base, char *str) {         //this function returns answer in base 10
            int len=strlen(str); int power=1; long long num=0;

           for (int i=len-1; i>=0; i--) {
              num+= val(str[i])*power;
              power=power*base;
           }
           return num;
         }

int main() {
    char str1[]="2P6X2MU";
    char str2[]="6PMP5GK";
    long long n=basemachine(35, str1);
    long long m=basemachine(30, str2);
    cout<<n<<" "<<m;
    return 0;
}

(2P6X2MU) 基数 35 和 (6PMP5GK) 基数 30 都 = 5000000000
但我的代码返回 705032704 705032704 而不是 5000000000 5000000000
我该如何解决这个问题?

【问题讨论】:

  • 听起来您可能需要学习如何使用调试器来单步调试您的代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。进一步阅读:How to debug small programsDebugging Guide
  • power 的类型是 int 而不是 long long
  • 我已经尝试过这个程序以获得较小的值,它工作正常@NathanOliver,我不明白为什么它不会返回 long long 值
  • @Jarod42 是的,我也尝试了 long long 类型的 power,但仍然遇到同样的问题
  • @P.Pawar -- 你为什么不打印出中间值来查看问题出在哪里?从我所看到的情况来看,您还没有进行任何调试。

标签: c++ loops decimal long-integer base


【解决方案1】:

power 的类型是 int 而不是 long long

Demo

【讨论】:

  • 所以我所要做的就是,谢谢。我试着让它保持很长时间,但我的程序没有正确构建。现在一切正常
猜你喜欢
  • 2023-03-29
  • 2021-11-29
  • 2016-09-28
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
相关资源
最近更新 更多