zzzyf 发表于 2021-5-15 23:30:47

c++ 高精度乘单精度

c++高精度乘单精度#include <bits/stdc++.h>
using namespace std;
string st;
int x,i,len,m;
int a;
int main(){
        cin>>st>>x;
        len=st.size();
        for(i=0;i<len;i++){
                a=st-'0';
        }
        for( i=0;i<len;i++){
                a*=x;
        }
        for( i=0;i<len;i++){
                a += a/10;
                a%=10;
        }
        while(a){
                a += a/10;
                a%=10;
                len++;
        }
        m=a;
        while(m){
                a=m%10;
                m=m/10;
        }
//        for(i=0;i<len;i++){
//                cout<<a;
//        }
        for(i=len-1;i>=0;i--){
                cout<<a;
        }
       
    return 0;
}
当输入20和3时,
输出了06.
求解决办法

yuxijian2020 发表于 2021-5-16 21:37:42

看了半天没看懂你想干什么...
你的程序到底要实现什么功能呢?
就你代码我说一下吧
      cin >> st >> x;
      len = st.size();
      for(i = 0; i < len; i++)
      {
                a = st - '0';
      }
      for( i = 0; i < len; i++)
      {
                a *= x;
      }
      for( i = 0; i < len; i++)
      {        //这里开始我就没看懂了   难道你是想进位?但是进位应该是低位进高位,没听说是高位进低位的啊
                a += a / 10;
                a %= 10;
      }
      while(a)//这里就更奇怪了,你有值的下标只到 len - 1,难道是因为进位?进位就不会是往低位
      {
                a += a / 10;
                a %= 10;
                len++;
      }
        //这我就又没看懂了,上面进位已经执行完了,为什么还要往后
        //这是得亏你上面进位没完成要是我输入100位数,你这直接就崩溃了都
      m = a;
      while(m)
      {
                a = m % 10;
                m = m / 10;
      }
//      for(i=0;i<len;i++){
//                cout<<a;
//      }
        //你这又从后向前打印,那可不就是输出06么
      for(i = len - 1; i >= 0; i--)
      {
                cout << a;
      }
页: [1]
查看完整版本: c++ 高精度乘单精度