145 条题解
-
-1
A+B问题居然没有高精度题解,发一篇吧!
#include <bits/stdc++.h> using namespace std; const int maxn=250; char sa[maxn],sb[maxn];//定义两个字符串 int a[maxn],b[maxn],c[maxn];//a,b位数字,c进位 int main() { scanf ("%d",sa); scanf ("%d",sb); memset (c,0,sizeof(c));//初始化赋值为0 int la=strlen (sa);//取字符串长度 int lb=strlen (sb); for (int i=0;i<la;i++) a[la-i-1]=sa[i]-'0'; for (int i=0;i<lb;i++) b[lb-i-1]=sb[i]-'0';//将两个字符串类型的数转换成整数 int lc=la>lb?la:lb;//三目运算符,取两个数字中数位最长的数字的数位 for (int i=0;i<lc;i++) { c[i] += a[i]+b[i];//加法运算 if (c[i]>=10) { c[i+1]=a[i]/10; c[i]=c[i]%10;//进位 } } if (c[lc]>0) lc++; int cnt=lc-1; while (c[cnt]==0) cnt--; for (int i=cnt;i>=0;i--) printf ("%d",c[i]); return 0; }
-
-1
#include using namespace std; struct Node { int data; Node *prev; Node *next; Node(int val) : data(val), prev(nullptr), next(nullptr) {} }; Node *createList(int num) { Node *head = nullptr; Node *tail = nullptr; while (num > 0) { int digit = num % 10; Node *newNode = new Node(digit); if (head == nullptr) { head = newNode; tail = newNode; } else { newNode->next = head; head->prev = newNode; head = newNode; } num /= 10; } return head; } Node *addTwoNumbers(Node *num1, Node *num2) { Node *result = nullptr; Node *current = nullptr; int carry = 0;
while (num1 != nullptr || num2 != nullptr || carry != 0) { int sum = carry;
if (num1 != nullptr) { sum += num1->data; num1 = num1->next; } if (num2 != nullptr) { sum += num2->data; num2 = num2->next; } carry = sum / 10; sum %= 10; Node *newNode = new Node(sum); if (result == nullptr) { result = newNode; current = newNode; } else { current->prev = newNode; newNode->next = current; current = newNode; }
}
return result;
} void printList(Node *head) { if (head == nullptr) { cout << "Empty list" << endl; return; }
while (head != nullptr) { cout << head->data; head = head->next; } cout << endl;
} void deleteList(Node *head) { while (head != nullptr) { Node *temp = head; head = head->next; delete temp; } } int main() { int num1 = 12345; int num2 = 6789;
Node *list1 = createList(num1); Node *list2 = createList(num2);
cout << "Number 1: "; printList(list1);
cout << "Number 2: "; printList(list2);
Node *sumList = addTwoNumbers(list1, list2);
cout << "Sum: "; printList(sumList);
deleteList(list1); deleteList(list2); deleteList(sumList);
return 0;
}
-
-1
何不试一试这种C++代码呢?
#include <iostream> #include <string> // 定义 A+B 的函数 std::string add(std::string num1, std::string num2) { // 将两个数字字符串转换为数字数组 int len1 = num1.length(); int len2 = num2.length(); int maxLen = std::max(len1, len2); int* arr1 = new int[maxLen]; int* arr2 = new int[maxLen]; for (int i = 0; i < maxLen; i++) { if (i < len1) { arr1[i] = num1[len1 - i - 1] - '0'; } else { arr1[i] = 0; } if (i < len2) { arr2[i] = num2[len2 - i - 1] - '0'; } else { arr2[i] = 0; } } // 进行加法运算 int carry = 0; std::string result = ""; for (int i = 0; i < maxLen; i++) { int sum = arr1[i] + arr2[i] + carry; carry = sum / 10; result = std::to_string(sum % 10) + result; } if (carry > 0) { result = std::to_string(carry) + result; } delete[] arr1; delete[] arr2; return result; } int main() { // 读取输入的两个数字 std::string num1, num2; std::cout << "请输入两个数字:" << std::endl; std::cin >> num1 >> num2; // 计算并输出结果 std::string sum = add(num1, num2); std::cout << "结果为:" << sum << std::endl; return 0; }
但愿这种代码不会出现TLE或者是MLE这个代码使用了字符串来表示大数,通过将字符串转换为数字数组,然后进行逐位相加的方式来实现 A+B 的功能。由于使用了字符串和动态数组,代码量较大。但是在实际应用中,这种方式并不是最高效的解决方案。在实际情况下,我们可以使用更简洁和高效的算法来解决这个问题。
我们可以用更简洁的方法做这道题
#include <bits/stdc++.h> using namespace std; int main(){ int a, b; cin >> a >> b; cout << a + b; return 0;
上面的代码是进行变量a和b直接相加的代码吗,这种也许就是标准代码。
好了,这道题的题解到此为止,走过路过,不要错过,点点赞吧~~~么么哒😗🥰
-
-1
Python 压行技巧,详细讲一讲:
split
函数,可以将字符串按一定分隔符分割,放在一个list
中。例如,s
是'abc.abcd'
,那么s.split ('.')
就是['abc', 'abcd']
,如果没有参数,默认为' '
;map
函数,可以将一个序列依次进行某个操作的最终序列。例如,a
是[1, 1, 4, 5, 1, 4]
,func
函数定义如下:
那么def func (int x): return x + 1
map (func, a)
就是[2, 2, 5, 6, 2, 5]
。sum
函数,可以求一个序列的和。例如,按照上面的a
,那么sum (a)
就是16
。
最终代码(注释参考样例一,不含注释一行):
print(sum(map(int,input().split()))) #print(sum(map(int, '1 2' .split()))) #print(sum(map(int, ['1', '2'] ))) #print(sum( [1, 2] ))) #print( 2 )
信息
- ID
- 56
- 时间
- 1000ms
- 内存
- 1024MiB
- 难度
- 1
- 标签
- 递交数
- 9073
- 已通过
- 4043
- 上传者