Кто лучше?
От: Staon Украина  
Дата: 08.06.03 19:09
Оценка: :)
Доброе время суток!
У меня такое дело – мы с братом не можем выяснить, чей код эффективней. Задача простая – дано число: 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;
 }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.