【刷题篇】笔试真题

编程入门 行业动态 更新时间:2024-10-26 10:41:08

【刷题篇】<a href=https://www.elefans.com/category/jswz/34/1769509.html style=笔试真题"/>

【刷题篇】笔试真题

文章目录

  • 复数乘法
  • 一年中的第几天
  • 字符串相加
  • 字符串相乘

复数乘法

复数 可以用字符串表示,遵循 “实部+虚部i” 的形式,并满足下述条件:
实部 是一个整数,取值范围是 [-100, 100]
虚部 也是一个整数,取值范围是 [-100, 100]
i^2 == -1
给你两个字符串表示的复数 num1 和 num2 ,请你遵循复数表示形式,返回表示它们乘积的字符串。

class Solution {
public:int convert1(string& str){int num=0;int flag=1;for(auto e :str){if(e=='-'){flag=-1;}else{if(e>='0'&&e<='9'){num=num*10+e-'0';}}}return num*flag;}string complexNumberMultiply(string num1, string num2) {vector<int> arr1(0);vector<int> arr2(2,0);vector<int> arr(2,0);int pos=num1.find('+');string str1=num1.substr(0,pos);string str2=num1.substr(pos+1);arr1[0]=convert1(str1);arr1[1]=convert1(str2);int pos1=num2.find('+');string str3=num2.substr(0,pos1);string str4=num2.substr(pos1+1);arr2[0]=convert1(str3);arr2[1]=convert1(str4);arr[0]=arr1[0]*arr2[0]-arr1[1]*arr2[1];arr[1]=arr1[0]*arr2[1]+arr1[1]*arr2[0];return to_string(arr[0]) + "+" + to_string(arr[1]) + "i";}// string ans = "";// int idx1 = num1.find('+'), idx2 = num2.find('+');// int a = stoi(num1.substr(0, idx1));// int b = stoi(num1.substr(idx1 + 1, num1.size() - idx1 - 1));// int c = stoi(num2.substr(0, idx2));// int d = stoi(num2.substr(idx2 + 1, num2.size() - idx2 - 1));// ans += to_string(a * c - b * d);// ans += "+";// ans += to_string(a * d + c * b);// ans += "i";//return ans;//}
};

一年中的第几天

给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天

class Solution {
public:int dayOfYear(string date) {int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};string yy = date.substr(0, 4);string mm = date.substr(5, 2);string dd = date.substr(8, 2);int y = stoi(yy);int m = stoi(mm);int d = stoi(dd);int ans = 0;if (((y%4==0)&&(y%100!=0))||(y%400==0)) days[1]++;for (int i = 0; i < m - 1; i++) {ans += days[i];}ans += d;return ans;}
};

字符串相加

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

class Solution {
public:int Sum(int num1,int num2,int& sign){int sum=num1+num2+sign;if(sum>=10){sum-=10;sign=1;}elsesign=0;return sum;}string addStrings(string num1, string num2) {int i=0,j=0,sign=0;string newstr;//方便尾插reverse(num1.begin(),num1.end());reverse(num2.begin(),num2.end());while(i<num1.size()&&j<num2.size())newstr.push_back('0'+(Sum(num1[i++]-'0',num2[j++]-'0',sign)));while(i<num1.size())//防止sign有数据newstr.push_back('0'+(Sum(num1[i++]-'0',0,sign)));while(j<num2.size())//防止sign有数据newstr.push_back('0'+(Sum(num2[j++]-'0',0,sign)));//考虑最后的值大于十if(sign==1)newstr.push_back('1');//最后在反转回来reverse(newstr.begin(),newstr.end());return newstr;}
};

字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

class Solution {
public:int Sum(int num1,int num2,int& sign){int sum=num1+num2+sign;if(sum>=10){sum-=10;sign=1;}elsesign=0;return sum;}string addStrings(string& num1, string& num2) {int i=0,j=0,sign=0;string newstr;//方便尾插reverse(num1.begin(),num1.end());reverse(num2.begin(),num2.end());while(i<num1.size()&&j<num2.size())newstr.push_back('0'+(Sum(num1[i++]-'0',num2[j++]-'0',sign)));while(i<num1.size())//防止sign有数据newstr.push_back('0'+(Sum(num1[i++]-'0',0,sign)));while(j<num2.size())//防止sign有数据newstr.push_back('0'+(Sum(num2[j++]-'0',0,sign)));//考虑最后的值大于十if(sign==1)newstr.push_back('1');//最后在反转回来reverse(newstr.begin(),newstr.end());return newstr;}string multiply(string num1, string num2) {if (num1 == "0" || num2 == "0") {return "0";}string ans = "0";int m=num1.size();int n=num2.size();for(int i=n-1;i>=0;i--){string str;int add=0;for(int j=n-1;j>i;j--){str.push_back(0);}int y=num2.at(i)-'0';for(int j=m-1;j>=0;j--){int x=num1.at(j)-'0';int product=x*y+add;str.push_back(product%10);add=product/10;}while(add!=0){str.push_back(add%10);add/=10;}reverse(str.begin(), str.end());for (auto &c : str) {c += '0';}ans = addStrings(ans, str);}return ans;}// string addStrings(string &num1, string &num2) {//     int i = num1.size() - 1, j = num2.size() - 1, add = 0;//     string ans;//     while (i >= 0 || j >= 0 || add != 0) {//         int x = i >= 0 ? num1.at(i) - '0' : 0;//         int y = j >= 0 ? num2.at(j) - '0' : 0;//         int result = x + y + add;//         ans.push_back(result % 10);//         add = result / 10;//         i--;//         j--;//     }//     reverse(ans.begin(), ans.end());//     for (auto &c: ans) {//         c += '0';//     }//     return ans;// }};

更多推荐

【刷题篇】笔试真题

本文发布于:2023-12-03 20:56:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1657565.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:笔试   真题   刷题篇

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!