笔试的2道题目,求高人解答

LAST_MAN 2012-06-13 10:01:56
1、设计一个程序,求出712的729次方的最后4位数是多少?
2‘假设A-Z分别为0-25,用来表示二十六进制,则“VMEMOB”转换成八进制是多少?
...全文
2269 59 打赏 收藏 转发到动态 举报
写回复
用AI写文章
59 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxmky 2012-06-25
  • 打赏
  • 举报
回复
个人认为29楼的思路比较特殊,二分更具有普遍性!
q244767346 2012-06-22
  • 打赏
  • 举报
回复

#include<iostream>
#include<iomanip>
using namespace std;

int end4(int a)//调用函数每次只保留上一次结果的末尾 4 位
{
int keep[4];
keep[0]=a%10;
a/=10;
keep[1]=a%10;
a/=10;
keep[2]=a%10;
a/=10;
keep[3]=a%10;

return keep[3]*1000+keep[2]*100+keep[1]*10+keep[0];
}
const int num1 = 712;//

int main()
{
int result = 712;
for(int i=0;i<729;i++)//做 729次循环
{
result*=num1;
result=end4(result);
}

cout<<setfill('0')<<setw(4)<<result<<endl;

return 0;
}
wuyuwww 2012-06-22
  • 打赏
  • 举报
回复
还是上面的一位说的对 地位与高位无关,为了不增加计算复杂度,边成边抛弃高位是比较好的思路
wuyuwww 2012-06-22
  • 打赏
  • 举报
回复
我敢保证结果和2的719次方式相同的
hackbuteer1 2012-06-22
  • 打赏
  • 举报
回复
用二分快速取幂比较方便的,边乘方边取模
pupingpp 2012-06-17
  • 打赏
  • 举报
回复
[code=Java][/codimport
java.math.BigInteger;
public class BigIntMul {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
BigInteger num=BigInteger.valueOf(712);
BigInteger num1=BigInteger.valueOf(1);
for(int i=1;i<=729;i++)
{
num1=num1.multiply(num);
}
System.out.println(num1.toString());
}
}e]
pupingpp 2012-06-17
  • 打赏
  • 举报
回复
呵呵,其实可以用java的BigInteger类,然后做乘法,就可以算出来了



cbzjzsb123 2012-06-17
  • 打赏
  • 举报
回复
这怎么算出来的??求指点
shexujia 2012-06-17
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 的回复:]
引用 21 楼 的回复:

712的729次方可以直接算出来,我的结果为:28702211561920424209499686327501265161011832043873162914636690369542873797376298058280702188235920113678086573458082370318561066009666513593503492381251382905660……
[/Quote]
大数的处理方法,处理成字符串来算,百度看看
shexujia 2012-06-17
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 的回复:]
private int GetReal(int x, int y, int realLength)
{
int mod = (int)Math.Pow(10, realLength);
int real = x;
int? retValue = null;

do
{
if ((y % 2) == 1)
{
retValue =retVa……
[/Quote]
没学C#,能大概说下数学处理的想法么
pupingpp 2012-06-17
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]

712的729次方可以直接算出来,我的结果为:28702211561920424209499686327501265161011832043873162914636690369542873797376298058280702188235920113678086573458082370318561066009666513593503492381251382905660942515718591098……
[/Quote]
这怎么算出来的??求指点
yemo5201 2012-06-17
  • 打赏
  • 举报
回复

int format_num(const char* str_)
{
int len = strlen(str_);
int sum = 0;
for(int j = 0; j != len; ++j)
{
int num = str_[len - j - 1] - 'A' + 1;
for(int k = 0; k != j; ++k)
{
num = 26 * num;
}
sum += num;
}
std::cout <<"十进制:"<< sum << std::endl;
//十进制转八进制自己算吧。。
return sum;
}
yemo5201 2012-06-17
  • 打赏
  • 举报
回复

int main(int argc, char* argv[])
{
int temp = 712;
for(int i = 0; i != 728; ++i)
{
temp = (temp * 712) % 10000;
}
printf("%04d",temp);
return 0;
}
yemo5201 2012-06-17
  • 打赏
  • 举报
回复

int main(int argc, char* argv[])
{
int temp = 712;
for(int i = 0; i != 728; ++i)
{
temp = (temp * 712) % 10000;
}
printf("%04d",temp);
return 0;
}
smsgreenlife 2012-06-17
  • 打赏
  • 举报
回复
底数的大小可能超过2的32次方,所以用数组保存,结果也是保存在数组r中
smsgreenlife 2012-06-17
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

int* big_num_power(int* a, int len_a, int n, int len_r)//计算数组a的n次幂,要求n>=0,保证len_r的长度足够保存结果
{
int *r = new int[len_r];
int *b = new int[len_r];
int i;
for(i=0; i<len_r-1; ++i)
{
r[i] = 0;
b[i] = 0;
}
r[len_r-1] = 1;
b[len_r-1] = 0;
int len_b = 1;

int *temp;
while(n--!=0)
{
for(i=len_a-1; i>=0; --i)
{
int j;
for(j=len_r-1; j>=len_r-len_b; --j)
{
b[i+j-(len_a-1)] += a[i]*r[j];
}
}
for(i=len_r-1; i>0; --i)
{
if(b[i]>=10)
{
b[i-1] += b[i]/10;
b[i] %= 10;
}
}
for(i=0; b[i]==0; ++i);
len_b = len_r-i;

temp = r;
r = b;
b = temp;
for(i=0; i<len_r; ++i)
{
b[i] = 0;
}
}
delete[] b;
return r;
}

int main()
{
int a[] = {7,1,2};
int len_a = sizeof(a)/sizeof(int);
int len_r = 2500;

int *r = big_num_power(a, len_a, 729, len_r);
for(int i=0; i<len_r; ++i)
{
cout<<r[i];
}
cout<<endl;

return 0;
}
smsgreenlife 2012-06-17
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int* big_num_power(int* a, int len_a, int n, int len_r)//计算数组a的n次幂,要求n>=0,保证len_r的长度足够保存结果
{
int *r = new int[len_r];
int *b = new int[len_r];
int i;
for(i=0; i<len_r-1; ++i)
{
r[i] = 0;
b[i] = 0;
}
r[len_r-1] = 1;
b[len_r-1] = 0;
int len_b = 1;

int *temp;
while(n--!=0)
{
for(i=len_a-1; i>=0; --i)
{
int j;
for(j=len_r-1; j>=len_r-len_b; --j)
{
b[i+j-(len_a-1)] += a[i]*r[j];
}
}
for(i=len_r-1; i>0; --i)
{
if(b[i]>=10)
{
b[i-1] += b[i]/10;
b[i] %= 10;
}
}
for(i=0; b[i]==0; ++i);
len_b = len_r-i;

temp = r;
r = b;
b = temp;
for(i=0; i<len_r; ++i)
{
b[i] = 0;
}
}
delete[] b;
return r;
}

int main()
{
int a[] = {7,1,2};
int len_a = sizeof(a)/sizeof(int);
int len_r = 2500;

int *r = big_num_power(a, len_a, 729, len_r);
for(int i=0; i<len_r; ++i)
{
cout<<r[i];
}
cout<<endl;

return 0;
}[Quote=引用 47 楼 的回复:]
这怎么算出来的??求指点
[/Quote]
yrnaaa 2012-06-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

编程之美中好像是有
[/Quote]
楼主,7楼写的这本书你要看看,面试题不少是这上面的。代码楼上已经写的不错了,我就不贴代码了。
临江仙 2012-06-15
  • 打赏
  • 举报
回复
第一题
C++代码奉上

#include <iostream.h>
void main()
{
int result=1;
for(int i=0;i<729;i++)
{
result=result*712;
if(result>=10000)
result=result%10000;
}
cout<<result<<endl;

}

最后结果是0752

第二题
先转换成十进制,后以八进制输出。第二题很简单的

vrealwall 2012-06-15
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 的回复:]

2.
C/C++ code

#include ……
[/Quote]

你用int来保存,早就溢出了。
加载更多回复(36)

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧