c++玄学问题求助
  • 板块学术版
  • 楼主xiaoke2021
  • 当前回复2
  • 已保存回复2
  • 发布时间2025/8/4 13:55
  • 上次更新2025/8/4 18:36:00
查看原帖
c++玄学问题求助
592751
xiaoke2021楼主2025/8/4 13:55

rt,我用devc++编译以下代码时,若环境为32位,输出为67500000000000001,若环境为64位,输出为67500000000000000。求问原因

输入为

1
1 1000000000000000

代码为

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
long long ans,ans1;
void write(long long x){
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
    return;
}
#define int long long
int tt;
int n;
int m;
inline int count(int x){
	int ret=0;
	if(x==0) return 1;
	while(x) ret++,x/=10;
	return ret;
}
inline int highnum(int x){
	while(x>=10) x/=10;
	return x;
}
inline int solve(int x){
	int cnt=0;
	for(int i=1;i<=x;i++) cnt=cnt*10+45*pow(10,i-1);
	return cnt;
}
void solve1(){
    ans=ans1=0;
	cin>>n>>m;
    if(m==0){
        cout<<0<<endl;
        return ;
    }
    n--;
    bool book=false;
    if(n<0) n=0,book=true;
	while(n){
		ans+=solve(count(n)-1)*highnum(n)+(1+highnum(n)-1)*(highnum(n)-1)/2*pow(10,count(n)-1)+highnum(n)*(n-highnum(n)*pow(10,count(n)-1)+1);
		n-=highnum(n)*pow(10,count(n)-1);
//		cout<<ans<<endl;
	}
    while(m){
		ans1+=solve(count(m)-1)*highnum(m)+(1+highnum(m)-1)*(highnum(m)-1)/2*pow(10,count(m)-1)+highnum(m)*(m-highnum(m)*pow(10,count(m)-1)+1);
		m-=highnum(m)*pow(10,count(m)-1);
//		cout<<ans1<<endl;
	}
//	cout<<" "<<ans1<<" "<<ans<<endl;
    if(!book) write(ans1-ans),cout<<endl;
    else write(ans1),cout<<endl;
}
signed main(){
    cin>>tt;
    while(tt--){
        solve1();
    }
}

开int128没用。

2025/8/4 13:55
加载中...