當前位置:
首頁 >
Gym - 101972A Multiplication Dilemma(模拟)
發布時間:2024/4/11
36
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Gym - 101972A Multiplication Dilemma(模拟)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:點擊查看
題目大意:我們規定特殊數字是除了最高位之外其他位置全是0的數,現在給出一個乘法表達式,請將這個式子拆分為只由特殊數字組成的乘法式子
題目分析:簡單模擬題,我們需要先知道該怎么模擬才行,既然題目明確說了,我們需要拆分成只由特殊數字所組成的式子,這里直接舉個簡單的例子應該就沒問題了:
12345 * 54321
=(10000+2000+300+40+5)*(50000+4000+300+20+1)
我們可以發現,每個數字都可以拆分成上述形式,也就是許多個特殊數字之和的形式,將兩個因子都拆分成這個形式,然后去掉括號,就是我們要求的答案了,注意一下答案的正負性,稍微判斷一下就好了
還有一個需要注意的地方就是,雖然題目中說了數字最大只有1e9,但是我們用字符串更方便處理,詳細的見代碼吧,簡單模擬
#include<iostream> #include<cstdio> #include<string> #include<ctime> #include<cstring> #include<algorithm> #include<stack> #include<queue> #include<map> #include<sstream> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;int f[10];int pa[15],pb[15];int main() { // freopen("input.txt","r",stdin);f[0]=1;for(int i=1;i<10;i++)f[i]=f[i-1]*10;int w;cin>>w;while(w--){string a,b;cin>>a>>b;int lena=a.size();int lenb=b.size();a=" "+a;b=" "+b;int opa=a[1]=='-'?-1:1;int opb=b[1]=='-'?-1:1;int cnta=0,cntb=0;for(int i=opa==1?1:2;i<=lena;i++)if(a[i]-'0')pa[++cnta]=i;for(int i=opb==1?1:2;i<=lenb;i++)if(b[i]-'0')pb[++cntb]=i;int ff=opa*opb;for(int i=1;i<=cnta;i++)for(int j=1;j<=cntb;j++){if(i==1&&j==1){if(ff==1)printf("%d x %d",(a[pa[i]]-'0')*f[lena-pa[i]],(b[pb[j]]-'0')*f[lenb-pb[j]]);elseprintf("-%d x %d",(a[pa[i]]-'0')*f[lena-pa[i]],(b[pb[j]]-'0')*f[lenb-pb[j]]);}elseprintf(" %c %d x %d",ff==1?'+':'-',(a[pa[i]]-'0')*f[lena-pa[i]],(b[pb[j]]-'0')*f[lenb-pb[j]]);}printf("\n");}return 0; }?
總結
以上是生活随笔為你收集整理的Gym - 101972A Multiplication Dilemma(模拟)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gym - 101972H Beauti
- 下一篇: HDU - 6186 CS Course