簡體   English   中英

優化C語言中的數學運算

[英]Optimize mathematical operations in c

我注冊了Web編程c,其中進行了幾種算法練習。 我做了一個非常簡單的問題,如下所示:我收到4個數字,這些數字確定矩形2個角的坐標,並且必須計算面積。 有一組測試,當第二個角在第一個角的下方或左側時(x1> x2 || y1> y2),程序退出。 在此處輸入圖片說明

范例:

輸入:

1 1 4 3
0 0 1 1
9 7 3 6 //Exit

輸出:

6
1

這是我的代碼。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    while(1) {
        int x1, x2, y1, y2;
        scanf("%d %d %d %d", &x1, &y1, &x2, &y2);//x1 y1 == A, x2 y2 == B
        if(x1 > x2 || y1 > y2)
            return 0;
        printf("%d\n", (x2 - x1) * (y2 - y1));
    }
}

我的問題只是出於好奇。 我用時間“ 0052”解決了這個問題,我前面有3個人成功解決了“ 0048”和“ 0024”! 我可以使用哪些優化方法來縮短時間? 可能是指針?

一些想法:

  1. 您可以使用gcc的__builtin_expect()函數來確保該條件為假。

  2. 指針不可能幫助您改進解決方案。

  3. scanf()可能是最慢的部分。 用解析器重寫該解析器,即只有預期的十進制整數可能會快得多。 當前, scanf()需要解析格式字符串,並且輸入數字可以是八進制,十六進制或十進制。 或可能是無效的輸入。 等等

數量不多,但是可以嘗試聲明int x1, x2, y1, y2; 進入循環之前。

這是我的建議:

  1. 在compile語句中使用:

     gcc -O3 
  2. 將所有工作變量放在全局空間而不是堆棧空間中

     int x1, x2, y1, y2;, area char buffer[100]; int main() { do { fgets( buffer, sizeof(buffer), stdin ); sprintf( buffer, "%d %d %d %d", &x1, &y1, &x2, &y2); x2-=x1; y2-=y1; area = y2*x2; printf("%d\\n",area); // or perhaps puts( itoa(area) ); } while(( 0 <= x2) && (0 <= y2) return(0); } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM