【发布时间】:2014-07-19 02:35:04
【问题描述】:
我正在尝试使用this method 来分解具有大指数的基数,因为标准 C++ 库中的数据类型不会存储那么大的数字。
问题出在最后一个循环中,我使用fmod() 函数来修改我的大数。答案应该是 1,但我得到 16。有人看到问题了吗?
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
typedef vector<int> ivec;
ivec binStorage, expStorage;
void exponents()
{
for (int j=binStorage.size(); j>=0; j--)
if(binStorage[binStorage.size()-j-1]!=0)
expStorage.push_back(pow(2, j));
}
void binary(int number)
{
int remainder;
if(number <= 1)
{
cout << number;
return;
}
remainder = number%2;
binary(number >> 1);
cout << remainder;
binStorage.push_back(remainder);
}
int main()
{
int num = 117;
int message = 5;
int mod = 19;
int prod = 1;
binary(num);
cout << endl;
exponents();
cout << "\nExponents: " << endl;
for (int i=0; i<expStorage.size(); i++)
cout << expStorage[i] << " " ;
cout << endl;
cout << "\nMessage" << "-" << "Exponent" << endl;
for (int i=0; i<expStorage.size(); i++)
{
cout << message << "-" << expStorage[i] << endl;
prod *= fmod(pow(message, expStorage[i]), mod);
}
cout << "\nAnswer: " << fmod(prod, mod) << endl;
return 0;
}
这是我的结果:
1110101
Exponents:
64 32 16 4 1
Message-Exponent
5-64
5-32
5-16
5-4
5-1
Answer: 16
Process returned 0 (0x0) execution time : 0.085 s
Press any key to continue.
编辑: 这是问题循环。
for (int i=0; i<expStorage.size(); i++)
{
cout << message << "-" << expStorage[i] << endl;
prod *= fmod(pow(message, expStorage[i]), mod);
}
【问题讨论】: