额,不知道写啥。 2023-06-20 06:33 采纳率: 71.4%
浏览 53
已结题

蜗蜗国的超精度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];
    }
}
  • 写回答

2条回答 默认 最新

  • threenewbee 2023-06-20 07:52
    关注
    这个函数不知道干嘛的,一直对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条)

报告相同问题?

问题事件

  • 系统已结题 7月1日
  • 已采纳回答 6月23日
  • 创建了问题 6月20日