Доброе время суток!
У меня такое дело – мы с братом не можем выяснить, чей код эффективней. Задача простая – дано число: 1) найти сумму его цифр 2) поменять вторую и предпоследнею цифры местами. Число типа int, ввод – компонент In, вывод суммы – Sum, вывод модифицированного числа – Out. Хотелось бы узнать Ваше мнение насчёт эффективности кода и его читабельности (понимания). Среда разработки – Cbuilder 4.
Вариант №1:
#include <vcl.h>
#include <algorithm.h>
#pragma hdrstop
#include "main.h"
#include <math.h>
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::OKClick(TObject *Sender)
{
int a, m[5], i=0, s=0;
long int b(0);
a=StrToInt(In->Text);
while (a!=0)
{
m[i]=a%10;
a/=10;
s+=m[i++];
}
swap(m[1], m[i-2]);
for(int j=i-1;j>=0;j--)
{
b+=m[j]*pow(10, j);
}
Sum->Text=IntToStr(s);
Out->Text=FloatToStr(b);
}
Вариант №2:
#include <vcl.h>
#include "math.h"
#pragma hdrstop
#include "main.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::startBtnClick(TObject *Sender)
{
long int x;
int sum=0;
int rank=0;
x=StrToInt(In->Text);
while (x>0)
{
sum+=x%10;
x/=10;
rank++;
}
Sum->Text=IntToStr(sum);
x=StrToInt(In->Text);
if (x>9)
{
short c1, c2;
c1=(x/(int)pow(10,rank-2))%10;
c2=(x%(int)pow(10,2))/10;
x-=c1*pow(10,rank-2);
x+=c2*pow(10,rank-2);
x-=c2*10;
x+=c1*10;
Out->Text=x;
}
}