鱼C论坛

 找回密码
 立即注册
查看: 5449|回复: 23

[技术交流] C/C++仿高山每周一练(难度增加)

[复制链接]
发表于 2022-10-6 12:36:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 陈尚涵 于 2022-10-6 13:48 编辑

如果你问我为什么要做仿每周一练,
因为,一天,我突然想起来我鱼C有VIP
就看了看,结果发现了 高山 (没有好友,不能@) 的每周一练
彳亍,就是难度太低了,刚学会语法的初学者就能做出来,能有 t1 的难度就不错了
所以我给大家搞点更难的题目,难度大概t2-t4吧
那么话不多说,上题!

题目:小X的加法
难度:t2-t3

题目描述:
小X是一个小学生,他学会了列加法竖式,但是像1+2或者11+22这种题已经屡见不鲜了,
准备尝试更大的数,但是这么一来,小X却不会做了,你可以用程序帮他做吗?

输入样例1:
  1. 1 2
复制代码


输出样例1:
  1. 3
复制代码


输入样例2:
  1. 105 285
复制代码


输出样例2:
  1. 390
复制代码


输入样例3:
  1. 12345678987654321753159 98765432123456789357951
复制代码


输出样例3:
  1. 111111111111111111111110
复制代码


注意:lz亲测C++的long long过不了样例3,样例3只有高精度能过
         高精度:指用字符串或数组模拟超大数字计算



如果我说的有问题欢迎指出,同时也欢迎大家发表代码,如果代码运行成功,奖励2鱼币

这个系列我随缘更新

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-6 12:38:41 | 显示全部楼层
有人吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 12:48:49 | 显示全部楼层
有人吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 12:51:29 | 显示全部楼层
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. int a[200], b[200], c[200];
  5. int a_len, b_len, c_len;
  6. void in() {
  7.         string tempa, tempb;
  8.         cin>>tempa>>tempb;
  9.         a_len = tempa.length();
  10.         b_len = tempb.length();
  11.         for(int i=0; i<a_len; ++i) {
  12.                 a[a_len-1-i] = tempa[i] - '0';
  13.         }
  14.         for(int i=0; i<b_len; ++i) {
  15.                 b[b_len-1-i] = tempb[i] - '0';
  16.         }
  17. }
  18. void add() {
  19.         for(int i=0; i<max(a_len, b_len); ++i) {
  20.                 c[i] += (a[i] + b[i]);
  21.                 c[i+1] += c[i] / 10;
  22.                 c[i] %= 10;
  23.         }
  24.         if(c[max(a_len, b_len)]) c_len = max(a_len, b_len) + 1;
  25.         else c_len = max(a_len, b_len);
  26. }
  27. void out() {
  28.         //cout<<c_len<<endl;
  29.         for(int i=c_len-1; i>=0; --i) {
  30.                 cout<<c[i];
  31.         }
  32. }
  33. int main()
  34. {
  35.         in();
  36.         add();
  37.         out();
  38.         return 0;
  39. }
复制代码

评分

参与人数 1鱼币 +2 收起 理由
陈尚涵 + 2 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 13:05:56 | 显示全部楼层
  1. #include <bits/stdc++.h>
  2. using namespace std;

  3. int l, la, lb;
  4. string f, s;
  5. char op;

  6. short a[1001], b[1001], ans[1002];

  7. void read(string va, string vb){
  8.     memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); memset(ans, 0, sizeof(ans));
  9.     la = va.size(); lb = vb.size(); l = la > lb ? la : lb;
  10.     for(int i = la - 1; i >= 0; i--) a[la-i-1] = va[i] - '0';
  11.     for(int i = lb - 1; i >= 0; i--) b[lb-i-1] = vb[i] - '0';
  12. }

  13. void print(short x[]){
  14.     for(int i = l-1; i >= 0; i--) cout << x[i];
  15.     cout << endl;
  16. }

  17. void add(short x[], short y[]){
  18.     int c = 0;
  19.     for(int i = 0; i < l; i++){
  20.         ans[i] = x[i] + y[i] + c;
  21.         c = ans[i] / 10;
  22.         ans[i] %= 10;
  23.     }
  24.     if(c){ans[l] = c; l++;}
  25. }

  26. int main(){
  27.     ios::sync_with_stdio(0);

  28.     cin >> f >> s;
  29.     read(f, s);
  30.     add(a, b);
  31.     print(ans);
  32.     return 0;
  33. }
复制代码

评分

参与人数 1鱼币 +2 收起 理由
陈尚涵 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 13:24:05 | 显示全部楼层
@高山
喂,是高山吗?这里有个人模仿你!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 13:30:43 | 显示全部楼层
  1. #include <iostream>
  2. #include <boost/multiprecision/cpp_int.hpp>

  3. using std::cin, std::cout, std::endl;
  4. using boost::multiprecision::cpp_int;

  5. int main() {
  6.     cpp_int a, b;
  7.     cin >> a >> b;
  8.     cout << a + b << endl;
  9.     return 0;
  10. }
复制代码

评分

参与人数 1鱼币 +2 收起 理由
陈尚涵 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-6 13:44:01 | 显示全部楼层
hveagle 发表于 2022-10-6 13:24
@高山
喂,是高山吗?这里有个人模仿你!

高山难度太低了,我们也可以合作啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 14:56:44 | 显示全部楼层
之前学相关的内容的时候就考虑过这种方法,但是碍于时间没有实际尝试过,这回正好实验一下
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <math.h>
  6. typedef struct{
  7.     uint32_t* data;
  8.     uint8_t blocks;
  9. }BigInteger;
  10. void BigInteger_init(BigInteger* integer){
  11.     integer->blocks = 0;
  12.     integer->data = NULL;
  13. }
  14. void BigInteger_release(BigInteger* integer){
  15.     if(integer->data != NULL) free(integer->data);
  16.     BigInteger_init(integer);
  17. }
  18. void BigInteger_read(BigInteger* integer){
  19.     static char buffer[2048];
  20.     BigInteger_release(integer);
  21.     scanf("%s", buffer);
  22.     int length = strlen(buffer);
  23.     integer->blocks = ceil(length / 9.0);
  24.     integer->data = (uint32_t*)malloc(sizeof(uint32_t) * integer->blocks);
  25.     for(int i = 0; length > 0; ++i){
  26.         int start = length - 9;
  27.         if(start < 0) start = 0;
  28.         sscanf(buffer + start, "%9u", integer->data + i);
  29.         length = start;
  30.         buffer[length] = '\0';
  31.     }
  32. }
  33. void BigInteger_write(const BigInteger* integer){
  34.     for(int i = integer->blocks - 1; i >= 0; --i){
  35.         if(i != integer->blocks - 1) printf("%09u", integer->data[i]);
  36.         else printf("%u", integer->data[i]);
  37.     }
  38.     putchar('\n');
  39. }
  40. void BigInteger_add(const BigInteger* lhs, const BigInteger* rhs, BigInteger* result){
  41.     BigInteger_release(result);
  42.     int predict_blocks = (lhs->blocks > rhs->blocks ? lhs->blocks : rhs->blocks) + 1;
  43.     result->data = (uint32_t*)malloc(sizeof(uint32_t) * predict_blocks);
  44.     int carry = 0;
  45.     for(int i = 0; i < predict_blocks; ++i){
  46.         if(i < lhs->blocks && i < rhs->blocks){
  47.             result->data[i] = carry + lhs->data[i] + rhs->data[i];
  48.         }else if(i < lhs->blocks){
  49.             result->data[i] = carry + lhs->data[i];
  50.         }else if(i < rhs->blocks){
  51.             result->data[i] = carry + rhs->data[i];
  52.         }else{
  53.             if(carry){
  54.                 result->data[i] = carry;
  55.                 result->blocks = predict_blocks;
  56.             }else{
  57.                 result->blocks = predict_blocks - 1;
  58.                 result->data = (uint32_t*)realloc(result->data, sizeof(uint32_t) * result->blocks);
  59.             }
  60.             break;
  61.         }
  62.         carry = result->data[i] > 999999999u ? 1 : 0;
  63.         result->data[i] = carry ? result->data[i] - 1000000000u : result->data[i];
  64.     }
  65. }
  66. int main(){
  67.     BigInteger a, b, result;
  68.     BigInteger_init(&a);
  69.     BigInteger_init(&b);
  70.     BigInteger_init(&result);
  71.     BigInteger_read(&a);
  72.     BigInteger_read(&b);
  73.     BigInteger_add(&a, &b, &result);
  74.     BigInteger_write(&result);
  75.     BigInteger_release(&a);
  76.     BigInteger_release(&b);
  77.     BigInteger_release(&result);
  78.     return 0;
  79. }
复制代码

评分

参与人数 1鱼币 +5 收起 理由
陈尚涵 + 5 厉害!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 17:35:54 | 显示全部楼层
陈尚涵 发表于 2022-10-6 13:44
高山难度太低了,我们也可以合作啊

我也觉得
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 19:56:24 From FishC Mobile | 显示全部楼层
陈尚涵 发表于 2022-10-6 13:44
高山难度太低了,我们也可以合作啊

收到
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-7 09:47:35 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-7 13:42:39 From FishC Mobile | 显示全部楼层
陈尚涵 发表于 2022-10-7 09:47

加好友
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-7 18:38:53 | 显示全部楼层

那我提高难度!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-7 18:39:48 | 显示全部楼层
高山 发表于 2022-10-7 18:38
那我提高难度!


普及组三四题难度!这种难度要得不?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-7 18:40:49 | 显示全部楼层
zhangjinxuan 发表于 2022-10-7 18:39
普及组三四题难度!这种难度要得不?

下次我得发创意小程序
想那个彩虹猫、系统恶搞之类的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-7 18:54:45 | 显示全部楼层
高山 发表于 2022-10-7 18:40
下次我得发创意小程序
想那个彩虹猫、系统恶搞之类的

有道理欸
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-9 13:11:34 | 显示全部楼层
我的算法不好,接下来的代码如果写的不是很好还请轻喷
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>

  4. int main()
  5. {
  6.         char a[1024];
  7.         char b[1024];
  8.         scanf("%s%s",a,b);
  9.         char res[strlen(a)>strlen(b)?strlen(a)+2:strlen(b)+2];
  10.         memset(res,0,sizeof(res)-1);
  11.         int i,j,k;
  12.         int flag=0;
  13.         i=strlen(a)-1;
  14.         j=strlen(b)-1;
  15.         for (int l=0;a[l]!='\0';l++) a[l] = a[l] - '0';
  16.         for (int l=0;b[l]!='\0';l++) b[l] = b[l] - '0';
  17.         for (k=sizeof(res)-2;i>=0 || j>=0 || k>=0;j--,i--,k--)
  18.         {
  19.                 if ((i<0?0:a[i])+(j<0?0:b[j])+flag >= 10)
  20.                 {
  21.                         res[k] = (i<0?0:a[i])+(j<0?0:b[j])-10+flag;
  22.                         flag = 1;
  23.                 }
  24.                 else
  25.                 {
  26.                         res[k] = (i<0?0:a[i])+(j<0?0:b[j])+flag;
  27.                         flag = 0;
  28.                 }
  29.         }
  30.         res[sizeof(res)-1] = '\0';
  31.         for (int l=0;l<sizeof(res)-1;l++) res[l] = res[l] + '0';
  32.         if (res[0] == '0') res[0] = '\b';
  33.         printf("%s\n",res);
  34.         return 0;
  35. }
复制代码

评分

参与人数 1鱼币 +2 收起 理由
陈尚涵 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-9 20:13:16 | 显示全部楼层

这个头文件我显示没有啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-9 20:24:09 | 显示全部楼层
陈尚涵 发表于 2022-10-9 20:13
这个头文件我显示没有啊

C++的boost库
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 07:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表