2012年第三屆藍橋杯C/C++程式設計本科B組省賽 大數乘法(程式碼填空)
大數乘法
對於32位字長的機器,大約超過20億,用int型別就無法表示了,我們可以選擇int64型別,但無論怎樣擴充套件,固定的整數型別總是有表達的極限!如果對超級大整數進行精確運算呢?一個簡單的辦法是:僅僅使用現有型別,但是把大整數的運算化解為若干小整數的運算,即所謂:“分塊法”。
如圖【1.jpg】表示了分塊乘法的原理。可以把大數分成多段(此處為2段)小數,然後用小數的多次運算組合表示一個大數。可以根據int的承載能力規定小塊的大小,比如要把int分成2段,則小塊可取10000為上限值。注意,小塊在進行縱向累加後,需要進行進位校正。
以下程式碼示意了分塊乘法的原理(乘數、被乘數都分為2段)。
void bigmul(int x, int y, int r[])
{
int base = 10000;
int x2 = x / base;
int x1 = x % base;
int y2 = y / base;
int y1 = y % base;
int n1 = x1 * y1;
int n2 = x1 * y2;
int n3 = x2 * y1;
int n4 = x2 * y2;
r[3] = n1 % base;
r[2] = n1 / base + n2 % base + n3 % base;
r[1] = ____________________________________________; // 填空
r[0] = n4 / base;
r[1] += _______________________; // 填空
r[2] = r[2] % base;
r[0] += r[1] / base;
r[1] = r[1] % base;
}
int main(int argc, char* argv[])
{
int x[] = {0,0,0,0};
bigmul(87654321, 12345678, x);
printf("%d%d%d%d\n", x[0],x[1],x[2],x[3]);
return 0;
}
答案: n2 / base + n3 / base + n4 % base
r[2] / base
相關文章
- 2012年第三屆藍橋杯C/C++程式設計本科B組省賽 放棋子(程式碼填空)C++程式設計
- 2012年第三屆藍橋杯C/C++程式設計本科B組省賽 方陣旋轉(程式碼填空)C++程式設計
- 2012年第三屆藍橋杯C/C++程式設計本科B組省賽 奇怪的比賽(結果填空)C++程式設計
- 2012年第三屆藍橋杯C/C++程式設計本科B組省賽 微生物增殖(結果填空)C++程式設計
- 2012年第三屆藍橋杯C/C++程式設計本科B組省賽 海盜比酒量(結果填空)C++程式設計
- 2012年第三屆藍橋杯C/C++程式設計本科B組省賽 密碼發生器(程式設計大題)C++程式設計密碼
- 第十三屆藍橋杯省賽C/C++ B組C++
- 藍橋杯2014年第五屆決賽C_C++程式設計本科B組C++程式設計
- 第十屆藍橋杯省賽C++B組 等差數列C++
- 第四屆藍橋杯C/C++本科B組第二道大題C++
- 【藍橋杯考前突擊】第十屆藍橋杯省賽C/C++大學B組 試題 D 數的分解C++
- 第十五屆藍橋杯大賽軟體賽省賽 C/C++ 大學 A 組C++
- 試題B:小球反彈(第十五屆藍橋杯省賽B組c/c++組)C++
- 第六屆藍橋杯省賽CC++B組C++
- 第十四屆藍橋杯省賽C++ B組(個人經歷 + 題解)C++
- 第十五屆藍橋杯C++B組省賽總結C++
- 歷屆藍橋杯省賽(C、C++)的答案(轉)C++
- 藍橋杯__省賽__第七屆__C/C++__大學A組C++
- 藍橋杯__省賽__第八屆__C/C++__大學A組C++
- 藍橋杯__省賽__第九屆__C/C++__大學A組C++
- 2019年省賽第十屆藍橋杯B組C/C++試題H解 等差數列C++
- 第十三屆藍橋杯省賽A組
- 第十五屆藍橋杯軟體賽省賽C/C++B 組題解C++
- 2017第八屆藍橋杯C/C++ B組省賽第二題 秒解C++
- 2018年第九屆藍橋杯省賽試題及詳解(Java本科B組)Java
- 2013年第四屆藍橋杯省賽試題及詳解(Java本科C組)Java
- 2016年藍橋杯C/C++組省賽第三題--湊算式C++
- 2017省賽藍橋杯B組
- 2016年省賽第七屆藍橋杯B組C/C++第九題解 交換瓶子C++
- 第14屆藍橋杯B組國賽
- 2015年藍橋杯六屆省賽大學B組真題
- 第九屆藍橋杯省賽C++A組 倍數問題(dfs)C++
- 2015藍橋杯省賽javaA組-----牌型種數(填空)Java
- 2015年省賽第六屆藍橋杯B組C/C++第五題解 九陣列分數C++陣列
- 2014年第五屆藍橋杯省賽試題及詳解(Java本科C組)Java
- 2018藍橋杯省賽B組
- 2020藍橋杯省賽B組C++(第二場)真題C++
- 2018年第九屆藍橋杯省賽試題及詳解(Java本科A組)Java