如何将argv字符串更改为大数字的长整数
how to change argv string to long integer for quite big number
我有疑问,这是一个可以从终端更改输入的代码,但由于输入来自argv,即字符串,我需要将字符串更改为长整数,当输入很大时,它不会产生正确的结果。如何解决这个问题?
/k解码E输出:4
/k编码10输出:BB
这产生了正确的结果
例如,当输入为"encode"时,"27691003381892347981273765782346987671864198764978136146376495409880251876462823746723173628347582973485972834752784935773114658736582736458972634785"它产生错误的结果
#include <stdio.h>
#define ll long long int
#include <queue>
#include <vector>
#include <iostream>
#include <bits/stdc++.h>
#include <string.h>
using namespace std;
char arr[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' };
ll decode(string k);
string encode(ll n);
void align(string k);
int main(int argc, char* argv[])
{
// start from 1 to ignore script name; argv[0] will be a name of processing file.
if (strcmp(argv[1], "decode") == 0) {
string p = argv[2];
ll total = decode(p);
cout << total << "n";
}
else if (strcmp(argv[1], "encode") == 0) {
long int yu = strtol(argv[2],NULL,10);
string str=encode(yu);
cout<<str<<endl;
}else if(strcmp(argv[1],"align")==0){
string k=argv[2];
align(k);
}
return 0;
}
string encode(ll n)
{ int i = 0;
string str="";
// array to store binary number
long binaryNum[1000];
if(n==0){
binaryNum[0]=0;
i++;
}
// counter for binary array
while (n > 0) {
// storing remainder in binary array
binaryNum[i] = n % 9;
n = n / 9;
++i;
}
long lo;
// printing code array in reverse order
for (int j = i - 1; j >= 0; j--) {
lo = binaryNum[j];
str+=arr[lo];
//cout << arr[lo];
}
return str;
}
,但由于输入来自argv,即字符串,因此我需要更改字符串到长整数,当输入很大时,它不会产生正确的结果。如何解决这个问题?
没有修复。
最大的C++整数(对于大多数桌面系统(是具有8个字节的uint64_t
(sizeof(uint64_t)
报告为8(。
UINTMAX_MAX
(在<cstdint>
中定义(是适用于uint64_t
的最大整数,并且只需要20个十进制数字来描述64位。
您根本无法将152位十进制数字497位转换为64位(最多可包含20位十进制数字描述的值(。
您可能希望研究多精度库。
我最喜欢的是GMP。它提供了一个mpz_class
(在<gmpxx.h>
标头中(来处理整数。
使用mpz_class
,我有代码可以生成45151个十进制数字来描述12345!(阶乘(,具有出色的性能。
相关文章:
- 如何将argv字符串更改为大数字的长整数
- 涡轮增压C++结果无法与长整数
- 将向量整数拆分为这些数字的整数
- 长整数的意外模仿行为
- 有符号长整数的含义
- 如何在 c++ 中解释对长整数的操作
- 如何将字符串数字转换为各个数字的整数数组
- 垃圾价值通过,同时总结一系列长整数
- 如果数字是整数,我如何检查此代码
- 长整数不适用于 8 的幂C++
- 从文件到短 /长整数读取字节
- C++长整数奇数
- 给定一个n位数的长整数,如何访问其部分
- 除 "6" 作为最右边数字的整数输入外,任何整数输入都可以使用,但任何数字(如 ...6.导致分段错误,为什么?
- 将长整数转换为字符数组的最安全方法是什么
- 使用构造函数c++将一个长整数转换为类对象
- 将一个长字符串除以一个长整数
- 如何在c++中分配一个具有数百位数字的整数
- 程序在c++中判断一个数字是整数还是浮点数
- 这是获取数字字符列表并使用它们创建长整数的有效方法吗