蜗蜗国最近在造一个超级大的城堡,要用到一块超级大的砖头,已知这块砖头的长宽高分别为 a,b,c
, 请你帮忙计算一下这块砖头的体积(长方体的体积等于长 ×
宽 ×
高)。但是聪明过人的你千万要注意,蜗蜗国是使用八进制的,a,b,c
也都是八进制下的数字,最后你给出的答案也需要是一个八进制数。
第一行输入一个很大的正整数 a
。
第二行输入一个很大的正整数 b
。
第三行输入一个很大的正整数 c
。
注意,a,b,c
都是八进制数。
输出 a×b×c
的结果,这也是一个八进制数。
输入格式
共三行。
第一行,一个很大的正整数 a
。
第二行,一个很大的正整数 b
。
第三行,一个很大的正整数 c
。
输出格式
仅一行,一个正整数。
样例输入
12345
123
455753
样例输出
777313460325
数据范围
记 A1
为 a
的位数,B2
为 b
的位数,C3
为 c
的位数。
对于 100%
的数据,保证 1≤A1,B2,C3≤100,a≠0,b≠0,c≠0
。
自己写的,不知道哪里错了
#include<bits/stdc++.h>
using namespace std;
int a[110],b[110],c[110],d[500],e[500];
char s[110];
int la,lb,lc,ld,le;
void change(char s[],int a[],int &la){
la=strlen(s+1);
for(int i=1;i<=la;i++){
a[i]=a[la-i+1]-'0';
}
}
int main(){
scanf("%s",s+1);
change(s,a,la);
scanf("%s",s+1);
change(s,b,lb);
scanf("%s",s+1);
change(s,c,lc);
ld=la+lb;
for(int i=1;i<=la;i++){
for(int j=1;j<=lb;j++){
d[i+j-1]+=a[i]*b[j];
}
}
for(int i=1;i<=ld;i++){
d[i+1]+=d[i]/8,d[i]%=8;
}
if(!d[ld]){
ld--;
}
le=ld+lc;
for(int i=1;i<=lc;i++){
for(int j=1;j<=ld;j++){
e[i+j-1]+=c[i]*d[j];
}
}
for(int i=1;i<=le;i++){
e[i+1]+=e[i]/8,e[i]%=8;
}
if(!e[le]){
le--;
}
for(int i=le;i>=1;i--){
cout<<e[i];
}
}
这个函数不知道干嘛的,一直对a操作,没用到s
void change(char s[],int a[],int &la){
la=strlen(s+1);
for(int i=1;i<=la;i++){
a[i]=a[la-i+1]-'0';
}
}
scanf("%s",s+1);
change(s,a,la);
scanf("%s",s+1);
change(s,b,lb);
scanf("%s",s+1);
change(s,c,lc);
这里三次输入都输入到s+1里了
反正两者起码有一个不对
后面八进制计算没仔细看,但是觉得也有问题
解题思路:
(1)把A柱子上的前N-1个盘子借助C柱子,全部移动到B柱子上(过程暂不考虑),再把第N个盘子由A柱子移动到C柱子上,那么剩下要移动的盘子在B柱子上了。
(2)把B柱子上的前N-2个盘子借助C柱子,全部移动到A柱子上(过程暂不考虑),再把第N-1个盘子由B柱子移动到C柱子上。
(3)重复上面的两个步骤即可把A柱子上的盘子全部移动到C柱子上。
#include <stdio.h>
void loveyou(int n, char start, char help, char end)
{
if (n >= 2)
{
loveyou(n - 1, start, end, help);
printf("%c------>%c\n", start, end);
loveyou(n - 1, help, start, end);
}
else if (n == 1)
{
printf("%c------>%c\n", start, end);
}
}
int main(void)
{
int n = 0;
printf("输入圆盘的数量:");
scanf("%d", &n);
loveyou(n, 'A', 'B', 'C');
return 0;
}