#18374: TLE!??? 就連blog的code都過不了!!! 求救!!


jackyname1@gmail.com (☆♬○♩程式家小崴●♪✧♩)

學校 : 基隆市私立二信高級中學
編號 : 77382
來源 : [114.32.51.178]
最後登入時間 :
2022-04-12 19:45:18
e024. 少年πの超大數運算(1) -- π | From: [36.225.47.176] | 發表日期 : 2019-07-07 17:10


#include <stdio.h>
#include<iostream>
#include<iomanip>
using namespace std;

int main()
{
ios::sync_with_stdio(false);
cin.tie(0);

long int a,i,b,d; //a是計次變數(指數的);i是第幾位數之變數;b是計次變數(輸出的);d是位數-1,即陣列的最大值
long long int n,m,v,s; //n是底數;m是指數;v是進位暫存變數;s用來記錄整數位數
while(cin >> n >> m)
{
if(n==0 && m==0)
break;

long long int x[100000]={0}; //宣告int x陣列
v=0; //清空v的值
s=1; //不管怎麼樣,s必會大於等於1,因為整數一定有位數
x[0]=1; //先讓最早要乘的這格陣列值等於1
for(a=1;a<=m;a++)
{
for(i=0;i<s;i++)
{
x[i]=x[i]*n+v; //各個位數運算式,v是有進位時要加上去的
v=x[i]/1000000000; //v若大於0,則需進位
x[i]=x[i]%1000000000; //每格陣列存九位數
if(v!=0&&i+1==s) //判斷陣列是否+1
s++; //記錄陣列位數
}
}

for(b=s-1;b>=0;b--) //反向輸出
{
if(b!=s-1) //最前面的陣列前面不能補0
cout << setfill('0') << setw(9) << x[b];
else //最前面的陣列輸出
cout << x[b];
}
cout << '\n'; //換行


}

return 0;
}

 

 

 

 

 

 
#18375: Re:TLE!??? 就連blog的code都過不了!!! 求救!!


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.137.149.175]
最後登入時間 :
2024-11-18 16:24:11
e024. 少年πの超大數運算(1) -- π | From: [223.140.236.11] | 發表日期 : 2019-07-07 17:15


#include
#include
#include
using namespace std;

int main()
{
ios::sync_with_stdio(false);
cin.tie(0);

long int a,i,b,d; //a是計次變數(指數的);i是第幾位數之變數;b是計次變數(輸出的);d是位數-1,即陣列的最大值
long long int n,m,v,s; //n是底數;m是指數;v是進位暫存變數;s用來記錄整數位數
while(cin >> n >> m)
{
if(n==0 && m==0)
break;

long long int x[100000]={0}; //宣告int x陣列
v=0; //清空v的值
s=1; //不管怎麼樣,s必會大於等於1,因為整數一定有位數
x[0]=1; //先讓最早要乘的這格陣列值等於1
for(a=1;a<=m;a++)
{
for(i=0;i<s;i++)
{
x[i]=x[i]*n+v; //各個位數運算式,v是有進位時要加上去的
v=x[i]/1000000000; //v若大於0,則需進位
x[i]=x[i]%1000000000; //每格陣列存九位數
if(v!=0&&i+1==s) //判斷陣列是否+1
s++; //記錄陣列位數
}
}

for(b=s-1;b>=0;b--) //反向輸出
{
if(b!=s-1) //最前面的陣列前面不能補0
cout << setfill('0') << setw(9) << x[b];
else //最前面的陣列輸出
cout << x[b];
}
cout << '\n'; //換行


}

return 0;
}

 

 

 

 

 

還是可以過得呀???沒問題的!
blog的code似乎宣告太大的陣列了,改小一點就AC了
/*8.9s,808KB*/

#include<iostream>
#include<iomanip>
using namespace std;
int main(){ 
	ios::sync_with_stdio(false);
	cin.tie(0); 
    long int a,i,b; 
    long long int n,m,v,s; 
    while(cin>>n>>m&&n&&m){
        long long int x[55560]={0}; 
        v=0; 
        s=1; 
        x[0]=1; 
        for(a=1;a<=m;a++)
        {
            for(i=0;i<s;i++)
            {
                x[i]=x[i]*n+v; 
                v=x[i]/1000000000; 
                x[i]=x[i]%1000000000;
                if(v!=0&&i+1==s)
                s++;
            }
        }
        for(b=s-1;b>=0;b--)
        {
            if(b!=s-1)
            cout << setfill('0') << setw(9) << x[b];
            else
            cout << x[b];
        }
        cout <<'\n';
    }
 }

 

 
#18376: Re:TLE!??? 就連blog的code都過不了!!! 求救!!


jackyname1@gmail.com (☆♬○♩程式家小崴●♪✧♩)

學校 : 基隆市私立二信高級中學
編號 : 77382
來源 : [114.32.51.178]
最後登入時間 :
2022-04-12 19:45:18
e024. 少年πの超大數運算(1) -- π | From: [36.225.47.176] | 發表日期 : 2019-07-07 17:30


#include
#include
#include
using namespace std;

int main()
{
ios::sync_with_stdio(false);
cin.tie(0);

long int a,i,b,d; //a是計次變數(指數的);i是第幾位數之變數;b是計次變數(輸出的);d是位數-1,即陣列的最大值
long long int n,m,v,s; //n是底數;m是指數;v是進位暫存變數;s用來記錄整數位數
while(cin >> n >> m)
{
if(n==0 && m==0)
break;

long long int x[100000]={0}; //宣告int x陣列
v=0; //清空v的值
s=1; //不管怎麼樣,s必會大於等於1,因為整數一定有位數
x[0]=1; //先讓最早要乘的這格陣列值等於1
for(a=1;a<=m;a++)
{
for(i=0;i<s;i++)
{
x[i]=x[i]*n+v; //各個位數運算式,v是有進位時要加上去的
v=x[i]/1000000000; //v若大於0,則需進位
x[i]=x[i]%1000000000; //每格陣列存九位數
if(v!=0&&i+1==s) //判斷陣列是否+1
s++; //記錄陣列位數
}
}

for(b=s-1;b>=0;b--) //反向輸出
{
if(b!=s-1) //最前面的陣列前面不能補0
cout << setfill('0') << setw(9) << x[b];
else //最前面的陣列輸出
cout << x[b];
}
cout << '\n'; //換行


}

return 0;
}

 

 

 

 

 

還是可以過得呀???沒問題的!
blog的code似乎宣告太大的陣列了,改小一點就AC了
/*8.9s,808KB*/

#include
#include
using namespace std;
int main(){ 
	ios::sync_with_stdio(false);
	cin.tie(0); 
    long int a,i,b; 
    long long int n,m,v,s; 
    while(cin>>n>>m&&n&&m){
        long long int x[55560]={0}; 
        v=0; 
        s=1; 
        x[0]=1; 
        for(a=1;a<=m;a++)
        {
            for(i=0;i<s;i++)
            {
                x[i]=x[i]*n+v; 
                v=x[i]/1000000000; 
                x[i]=x[i]%1000000000;
                if(v!=0&&i+1==s)
                s++;
            }
        }
        for(b=s-1;b>=0;b--)
        {
            if(b!=s-1)
            cout << setfill('0') << setw(9) << x[b];
            else
            cout << x[b];
        }
        cout <<'\n';
    }
 }

 

謝謝!!!  


 
ZeroJudge Forum