蜗蜗国的超精度C++

蜗蜗国最近在造一个超级大的城堡,要用到一块超级大的砖头,已知这块砖头的长宽高分别为 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里了
反正两者起码有一个不对
后面八进制计算没仔细看,但是觉得也有问题

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/1065145
  • 除此之外, 这篇博客: C与C++程序设计学习笔记中的 5、汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,每次移动一个圆盘,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘,柱子可以编号为A B C,编程输出n个圆盘从A柱子移动到C柱子的步骤。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 汉诺塔游戏:把所有盘子从A移动到C

    解题思路:
    (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;
    }