【发布时间】: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 programs 和 Debugging Guide
-
power的类型是int而不是long long。 -
我已经尝试过这个程序以获得较小的值,它工作正常@NathanOliver,我不明白为什么它不会返回 long long 值
-
@Jarod42 是的,我也尝试了
long long类型的power,但仍然遇到同样的问题 -
@P.Pawar -- 你为什么不打印出中间值来查看问题出在哪里?从我所看到的情况来看,您还没有进行任何调试。
标签: c++ loops decimal long-integer base