면접 문제 정리. - 대수 구 화.
원제:
http://acm.hdu.edu.cn/showproblem.php?pid=1002
먼저 정확 한 사 고 를 말 하 다.
첫 번 째 단계:
입력 한 처리:
입력 이 00000123344 라면 123344 로 처리 해 야 합 니 다.
함수:
string &_del_zeros_before_dot(string &a)
{
if (a.length() <= 0 || a[0] != '0') return a;
int i = 0;
while (i < a.length() && a[i] == '0') ++i;
a = a.substr(i, a.length() - i);
return a;
}
두 번 째 단계:
화 해 를 구 할 때 두 개의 정수 가 합 쳐 지기 때문에 가장 많이 증가 하 는 자릿수 는 1 (즉 문자열 의 길이 가 1) 이다.
게다가 두 문자열 을 모두 처리 해 야 한다.두 문자열 을 처리 한 후 에는 반드시 진 위 를 처리 하 는 상황 을 기억 해 야 한다.
여기 서 이런 처 리 를 간소화 했다.간단 한 코드 봐.
string &_string_add_string(const string &a, const string &b, string &res)
{
int sum_value = 0, add_bit = 0;
const int alen = a.length(), blen = b.length();
res = "0" + (alen > blen ? a : b);
for (int i = alen-1, j = blen-1, k = res.length() - 1;
i >= 0 || j >= 0 || add_bit > 0;
--i, --j, --k){
sum_value = (i>=0 ? a[i]-48: 0) + (j>=0 ? b[j]-48: 0) + add_bit;
add_bit = sum_value / 10;
res[k] = sum_value%10 + '0';
}
if (res[0] == '0') res = res.substr(1, res.length() - 1);
return res;
}
결과 1 위 는 0 이 될 수 없 기 때문에 마지막 으로 res 의 1 위 를 삭제 할 지 여 부 를 판단 해 야 한다.
세 번 째 단계:
AC 코드 를 드 리 겠 습 니 다.
#include <iostream>
#include <string>
using namespace std;
string &_del_zeros_before_dot(string &a)
{
if (a.length() <= 0 || a[0] != '0') return a;
int i = 0;
while (i < a.length() && a[i] == '0') ++i;
a = a.substr(i, a.length() - i);
return a;
}
string &_string_add_string(const string &a, const string &b, string &res)
{
int sum_value = 0, add_bit = 0;
const int alen = a.length(), blen = b.length();
res = "0" + (alen > blen ? a : b);
for (int i = alen-1, j = blen-1, k = res.length() - 1;
i >= 0 || j >= 0 || add_bit > 0;
--i, --j, --k){
sum_value = (i>=0 ? a[i]-48: 0) + (j>=0 ? b[j]-48: 0) + add_bit;
add_bit = sum_value / 10;
res[k] = sum_value%10 + '0';
}
if (res[0] == '0') res = res.substr(1, res.length() - 1);
return res;
}
int main(void)
{
string a, b, c;
int t;
scanf("%d", &t);
for (int i = 1; i < t + 1; ++i){
cin >> a >> b;
_del_zeros_before_dot(a);
_del_zeros_before_dot(b);
printf("Case %d:
%s + %s = ", i, a.c_str(), b.c_str());
_string_add_string(a, b, c);
printf("%s
", c.c_str());
if (i != t) printf("
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.